嵌套模式中的Mongoose填充数组

时间:2016-10-19 18:56:42

标签: node.js mongodb mongoose mongoose-populate

这是我的架构:

var userSchema = {
  folders           : [ folderSchema ],
  ...
}

var folderSchema = new mongoose.Schema({
  itemlist      : [{ type: String, ref: 'Item', required: true }],
  foldername    : { type: String},
  ...
});

// Item model
var itemSchema = {
  name: { type: String },
  ...
}

我想在每个folderSchema中填充itemlist(整个数组),这可能吗?

到目前为止我尝试过的但是没有工作:

userModel.findOne({ _id: userId }, null, callback).populate({
  path: 'folders.$.itemlist',
  select: 'name'
});

post和此post类似,但它们存储文件夹模型并具有引用而不是嵌套文档。

奖励:是否可以通过foldername仅选择一些文件夹来填充其项目列表?

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找“深度人口”,请参阅population部分“填充多个级别”

将您的填充内容重写为:

userModel.findOne({ _id: userId }, null, callback).populate({
  path: 'folders',
  populate: { path : 'itemlist'}
});

答案 1 :(得分:0)

最简单的解决方案是实际检索嵌套文件夹并手动执行查找。然后只需调用find({_ id:{$ in:folder}});找到数组的所有元素。