填充嵌套引用的更好方法 mongoosejs

Posted

技术标签:

【中文标题】填充嵌套引用的更好方法 mongoosejs【英文标题】:Better way to Populate nested references mongoosejs 【发布时间】:2015-10-23 04:45:51 【问题描述】:

我正在尝试填充嵌套在其他引用中的引用。我有它的工作,但它似乎有点老套,想知道是否有任何其他方法可以做到这一点:

return Q.ninvoke(BoardSchema, 'find', '_id': id).then(function(board) 
    return Q.ninvoke(BoardSchema, 'populate', board, path: 'lanes').then(function(board)
        return Q.ninvoke(LaneSchema, 'populate', board[0].lanes, path: 'cards').then(function(lanes)
            board.lanes = lanes;
            return board;
        );
    );
);

是否有某种方法可以填充所有引用,或者返回第二个填充作为板调用的一部分,而不像现在这样手动设置它?

【问题讨论】:

【参考方案1】:

您应该能够像这样填充多个以填充嵌套文档:

Item.find().populate('foo foo.child').exec(function(err, items) 
    // Do something here
);

这要求在 Schema 定义中设置 refs。

如果这不起作用,老实说大多数时候出于某种原因,您可以链接您的发现。但这与您的代码差别不大。

Item.find().populate('foo').exec(function(err, items) 
    Item.find(items).populate('bar').exec(function(err, items) 
        // Even more nests if you like
    );
);

【讨论】:

感谢 Gideon,是的,我似乎无法找到一种方法来填充第二个参考而不将调用链接在一起。感谢您的帮助!【参考方案2】:

基于吉迪恩的回应

Item.find( _id: id)
  .populate(
    path: 'foo',
    model: 'FooModel',
    populate: 
      path: 'child',
      model: 'ChildModel'
    
  )
  .exec(function(err, items) 
  // ...
);

【讨论】:

以上是关于填充嵌套引用的更好方法 mongoosejs的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB Mongoose 聚合查询深度嵌套数组删除空结果并填充引用

如何填充嵌套的虚拟对象?

如何填充嵌套的虚拟对象?

MongoDB:如何使用查找查询填充嵌套对象?

使用 Python 使用嵌套字典填充 MongoDB 数据库

使用 jQuery 和 Math.random() 选择嵌套对象属性