【问题标题】:mongo mongoose populate subdocument returns nullmongo mongoose 填充子文档返回 null
【发布时间】:2014-11-20 05:09:36
【问题描述】:

我正在尝试使用 node & mongoose 的填充方法来在查询中“加入”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。有人能告诉我我做错了什么吗?谢谢。

【问题讨论】:

    标签: mongodb mongoose mongoose-populate


    【解决方案1】:

    我只是通过反复试验找到了答案..... 在最后一个示例中 ShopSchema 在 RatingSchema 之前声明。所以我猜 Mongoose 并不确切知道 RatingSchema 内部发生了什么,并使填充返回错误。所以如果你在 ShopSchema 之前声明 RatingSchema 并且 populate 方法就像一个魅力..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-02
      • 2017-01-27
      • 1970-01-01
      • 2014-08-16
      • 2019-06-17
      • 2013-06-30
      • 2017-03-21
      • 2017-06-06
      相关资源
      最近更新 更多