如何填充一组子`ref`ed文档猫鼬?

Posted

技术标签:

【中文标题】如何填充一组子`ref`ed文档猫鼬?【英文标题】:How to populate an array of sub `ref`ed documents mongoose? 【发布时间】:2016-05-16 07:41:11 【问题描述】:

我正在使用 Mongoose 版本 4.4.0 开发 MEAN 堆栈应用程序,并且在填充子文档数组时遇到问题。 (在 SO 的其他地方找不到解决方案。

以下说明模型的结构:

签证模式

var visaSchema = new mongoose.Schema(
  from: type: Schema.Types.ObjectId, ref: 'Country',
  to: type: Schema.Types.ObjectId, ref: 'Country',
  requirements: [
    type: Schema.Types.ObjectId, ref: 'Requirement'
  ]
);

exports.model = mongoose.model('Visa', visaSchema);

需求模型

var requirementSchema = new mongoose.Schema(
   visa: type: Schema.Types.ObjectId, ref: "Visa",
   title: String,
   body: String
);

exports.model = mongoose.model('Requirement', requirementSchema);

以上基本上构成了VisaRequirement 之间的一对多 关系。

问题

我无法填充 requirements 字段,该字段实际上是 Requirement ref 对象的数组。

这就是我试图实现它的方式:

Visa.find()
   //.populate('from', null, shortName: from)
   //.populate('to', null, shortName: to)
   .populate('requirements')
   .exec(function(err, result)
      res.json(result);
   );

每当我尝试填充 requirements 字段时,它都会在 requirements 键上返回一个空数组。

但是没有人口,它返回ObjectIds的数组:

[
   
     "_id":"56b329878848eba00c0f5535",
     "from"
          "_id":"56b2db1b57f9e71c1bfbadb9",
          "name":"Germany",
          "shortName":"DE",
          "__v":0
     ,
     "to":
          "_id":"56b2db0f57f9e71c1bfbadb8",
          "name":"Afghanistan",
          "shortName":"AFG",
          "__v":0
     ,
     "__v":3,
     "requirements":  [
          "56b331d764585e8c12c14dd1", 
          "56b336431ffc49bc19bf1c96",
          "56b33675443f033c14e26d03"
      ]
   
]

我做错了什么?

我们将不胜感激。

【问题讨论】:

【参考方案1】:

你可以试试:

Visa.find()
  .populate([
      path: "from" ,
      path: "to" ,
      path: "requirements" ,
   ])
  .exec(function(err, result)
     res.json(result);
);

【讨论】:

以上是关于如何填充一组子`ref`ed文档猫鼬?的主要内容,如果未能解决你的问题,请参考以下文章

填充猫鼬后查找

猫鼬填充如何在同一对象而不是子文档中填充文档

如何填充新创建的猫鼬文档?

猫鼬模式参考和填充

在猫鼬中反向填充

当填充涉及猫鼬时如何返回文档内容数组