提问者:小点点

Mongoose:在一次调用中填充多个查询


在Mongoose中,我可以使用查询填充来填充查询后的其他字段。我还可以填充多个路径,例如

Person.find({})
 .populate('books movie', 'title pages director')
 .exec()

然而,这将生成对收集标题、页面和导演字段的书籍的查找,以及对收集标题、页面和导演字段的电影的查找。我想要的是只从书籍中获取标题和页面,从电影中获取导演。我可以做这样的事情:

Person.find({})
 .populate('books', 'title pages')
 .populate('movie', 'director')
 .exec()

这给了我预期的结果和查询。

但是有没有办法让第二个片段的行为使用类似于第一个片段的“单行”语法?这样做的原因是,我想以编程方式确定填充函数的参数并输入它。我不能对多个填充调用这样做。


共3个答案

匿名用户

在研究了猫鼬的源代码后,我用以下方法解决了这个问题:

var populateQuery = [{path:'books', select:'title pages'}, {path:'movie', select:'director'}];

Person.find({})
 .populate(populateQuery)
 .execPopulate()

匿名用户

您还可以执行以下操作:

{path:'user',select:['key1','key2']}

匿名用户

您可以通过简单地将对象或对象数组传递给填充()方法来实现这一点。

const query = [
    {
        path:'books', 
        select:'title pages'
    }, 
    {
        path:'movie', 
        select:'director'
    }
];
const result = await Person.find().populate(query).lean();

考虑lein()方法是可选的,它只是返回原始json而不是mongoose对象,并使代码执行更快一点!不要忘记让你的函数(回调)异步!