1

ノードとマングースのpopulateメソッドを使用して、クエリで2つのコレクションを「結合」しようとしています。以下は私のスキーマ設定です:

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

var ShopSchema = new Schema({
  ssss: { type: Schema.Types.ObjectId, required :true, ref: 'Stat' },
  ratings: [RatingSchema]
});

var RatingSchema = new Schema({
  stat: { type: Schema.Types.ObjectId, required :true, ref: 'Stat' }
}, {_id: false});

また、クエリがエラーなしで機能するように Stat mongoose モデルをセットアップしました (ただし、結果は期待したものではありません)。

次のクエリを実行しようとしました。

ShopSchema.statics.load = function(id, cb) {
  this.findOne({
    _id: id
  }).populate('ssss', '_id stat_id').exec(cb);
};
mongoose.model('Shop', ShopSchema);

これにより正しい結果が得られ、ssss が正しく参照されます。結果はこのようなものです。

"ssss":{"_id":"5406839ad5c5d9c5d47091f0","stat_id":1}

ただし、次のクエリでは間違った結果が得られます。

ShopSchema.statics.load = function(id, cb) {
  this.findOne({
    _id: id
  }).populate('ratings.stat', '_id stat_id').exec(cb);
};
mongoose.model('Shop', ShopSchema);

これにより、すべての結果で rating.stat = null が得られます。誰かが私が間違ったことを教えてもらえますか? ありがとう。

4

1 に答える 1

1

試行錯誤で答えを見つけました.....最後の例では、RatingSchemaの前にShopSchemaが宣言されています。したがって、Mongoose は RatingSchema 内で何が起こっているのかを正確に認識しておらず、データを入力するとエラーが返されると推測しています。したがって、ShopSchema の前に RatingSchema を宣言し、populate メソッドが魅力的に機能している場合..

于 2014-11-03T01:52:18.870 に答える