【问题标题】:MongooseJS - population path of subdocumentsMongooseJS - 子文档的填充路径
【发布时间】:2014-09-20 18:33:46
【问题描述】:

我在以下模式的人口方面遇到了真正的问题。它可能不是最好的模型设计(对于 MEAN 堆栈来说相对较新),但我可以让它填充除 Spec 模型之外的所有内容。

// Spec Model
var SpecSchema = new Schema({
  time: { 
    type: Date,
    default: Date.now
  },
  active: {
    type: Boolean,
    default: 'true'
  },
  name: String,
  desc: String
});
module.exports = mongoose.model('Spec', SpecSchema);

// Thing model
var specsSchema = new Schema({
  time: { 
    type: Date,
    default: Date.now
  },
  spec: { 
    type: Schema.Types.ObjectId, 
    ref: 'Spec' 
  },
  value: String,
});
var ThingSchema = new Schema({
  time: { 
    type: Date,
    default: Date.now
  },
  active: { 
    type: Boolean,
    default: true
  },
  title: String,
  specs: [specsSchema]
});
var Thing = mongoose.model('Thing', ThingSchema);

// Set model
var thingsSchema = new Schema({
  time: { 
    type: Date,
    default: Date.now
  },
  active: {
    type: Boolean,
    default: 'true'
  },
  thing: { 
    type: Schema.Types.ObjectId, 
    ref: 'Thing' 
  }
});
var SetSchema = new Schema({
  user: { 
    type: Schema.Types.ObjectId, 
    ref: 'User' 
  },
  time: { 
    type: Date,
    default: Date.now
  },
  active: {
    type: Boolean,
    default: 'true'
  },
  title: String,
  things: [thingsSchema]
});
var Set = mongoose.model('Set', SetSchema);

标准人群很好,但我一辈子都无法让model.populate 工作,并且从我看过的所有示例和解决方案中,我不清楚路径应该是什么。

Set.findById(req.params.id)
  .populate('things.thing')
  .populate('user', '_id name')
  .exec(function (err, set) {
    if(err) { return handleError(res, err); }
    if(!set) { return res.send(404); }
      Thing.populate(set,{
          path:'things.thing.specs.spec',
          select: 'name',
          model: Spec
      }, function(err, set){
        if ( err ) return res.json(400, err);
    });
    return res.json(set);
});

任何指向正确方向的指针将不胜感激。

【问题讨论】:

    标签: node.js mongodb mongoose mean-stack


    【解决方案1】:
    path:'things.thing.specs.spec',
          select: 'name',
          model: Spec
    

    应该是

    path:'things.thing.specs.spec',
          select: 'name',
          model: 'Spec'
    

    【讨论】:

      猜你喜欢
      • 2016-05-28
      • 2017-10-08
      • 2020-06-30
      • 2014-08-16
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 2016-06-27
      相关资源
      最近更新 更多