1

ほとんどの場合、nodejs で安らかな API を作成してきました。私がアクセスしている MongoDB には 2 つのコレクションがあり、それらは空の文字列を返し、名前に大文字を含む唯一のコレクションです。MongoClient を使用すると、これらのコレクションに問題なくアクセスできるため、古い mongodb ドライバーではないことがわかります。

1 つの例は、bulkBuds というコレクションにアクセスしようとしたときです。

//bulkBuds model

var mongoose = require('mongoose'),
  Schema = mongoose.Schema;

var BulkBudsSchema = new Schema({
  sourceLicense: String,
  quantity: Number,
  strainName: String,
  priceProfile: String
});

mongoose.model('bulkBuds', BulkBudsSchema);

コントローラーのクエリには余分なロジックが少し含まれていますが、単純な検索でも空の文字列が返されます。

//bulkBuds controller
var express = require('express'),
  router = express.Router(),
  mongoose = require('mongoose'),
  BulkBuds = mongoose.model('bulkBuds'),
  Friends = mongoose.model('Api'),
  config = require('../../config/config'),
  jwt = require('express-jwt');

    module.exports = function (app) {
      app.use('/api/bulkBuds/', router);
    };

    router.get('/:license', jwt({secret: config.secret}), function (req, res, next) {
      if(!req.user.friend){
        res.status(401);
      }
      Friends.findById(req.user.id, function(err, friend){
        if(err) throw err;
        if(!friend) res.send("friend does not exist");
        if(req.user.username != friend.username) res.send("invalid user");
        console.log(req.params.license);
        console.log(BulkBuds.find({}));
        BulkBuds.find({'storeLicense': req.params.license, 'availableForSale': true},
        "sourceLicense quantity strainName priceProfile", function (err, bulkBuds) {
          if (err) return next(err);
          console.log(bulkBuds);
          res.send(bulkBuds);
        });
      })
    });

どんな提案でも大歓迎です、ありがとう。

4

1 に答える 1

2

データベースに対してテストできずに答えるのは非常に困難です。しかし、私はいくつかのことを試してみます。

  1. {'storeLicense': req.params.license, 'availableForSale': true} をリファクタリングして、クエリの外部でオブジェクトを作成し、そのオブジェクトをクエリに渡す前にコンソール ログに記録します。これにより、すべてが期待どおりになることが保証されます。

  2. BulkBuds.find の 2 番目の引数として「sourceLicense 数量ひずみ名 priceProfile」を削除し、空のオブジェクトに置き換えます。私は通常、次の構文 {_id:1,quantity:0} を使用してオブジェクトを 2 番目のパラメーターとして渡し、射影を変更します。あなたの構文は機能するかもしれませんが、結果が得られるかどうかを確認せずにクエリを実行しようとする場合に備えて。

  3. データベースの数量が実際に数値であり、文字列ではないことを確認してください。mongoose では、検証されないレコードを挿入できないことはわかっていますが、クエリについては不明です。おそらく問題ではありませんが、確認しても問題ありません。

  4. Bulkbirds スキーマを作成したら、これを試してください。

mongoose.model('bulkBuds', BulkBudsSchema, 'bulkBuds');

別の長いショットですが、おそらくマングースがコレクション名を複数形にすることに関係があります。上記の構文を使用すると、bulkBuds コレクションに対してクエリが実行されます。

繰り返しになりますが、テストできずに特定するのは困難ですが、これらのアイデアが役立つことを願っています.

于 2015-11-19T22:53:41.130 に答える