Se7*_*ays 61 javascript mongoose
在Mongoose中,我可以使用查询填充来在查询后填充其他字段.我也可以填充多个路径,例如
Person.find({})
.populate('books movie', 'title pages director')
.exec()
Run Code Online (Sandbox Code Playgroud)
然而,这将在书籍上产生查询,收集标题,页面和导演的字段 - 以及查看收集标题,页面和导演字段的电影.我想要的只是从书本中获取标题和页面,从电影中获取导演.我可以这样做:
Person.find({})
.populate('books', 'title pages')
.populate('movie', 'director')
.exec()
Run Code Online (Sandbox Code Playgroud)
这给了我预期的结果和查询.
但有没有办法让第二个片段的行为使用类似"单行"的语法,如第一个片段?原因是,我想以编程方式确定populate函数的参数并将其输入.我不能为多个填充调用执行此操作.
Se7*_*ays 129
在查看猫鼬的源代码后,我用以下方法解决了这个问题:
var populateQuery = [{path:'books', select:'title pages'}, {path:'movie', select:'director'}];
Person.find({})
.populate(populateQuery)
.execPopulate()
Run Code Online (Sandbox Code Playgroud)
您只需将对象或对象数组传递给 populate() 方法即可实现此目的。
const query = [
{
path:'books',
select:'title pages'
},
{
path:'movie',
select:'director'
}
];
const result = await Person.find().populate(query).lean();
Run Code Online (Sandbox Code Playgroud)
考虑到lean()方法是可选的,它只返回原始json而不是mongoose对象,并使代码执行速度更快一些!不要忘记使您的函数(回调)异步!
归档时间: |
|
查看次数: |
31336 次 |
最近记录: |