【问题标题】:Better way to Populate nested references mongoosejs填充嵌套引用的更好方法 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;
        });
    });
});

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

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongoose-populate


    【解决方案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) {
      // ...
    });
    

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 2017-10-08
      • 2020-01-08
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      相关资源
      最近更新 更多