我有一个mongoose查询,其中我限制结果的数量,让我们说3个条目。我的问题是,每个对象都填充了嵌套对象。这个嵌套对象有一个" active" -flag。我不想返回任何具有嵌套对象的对象,其中"活动" -flag为false,但是在限制之后应用了填充过滤器,因此结果可能为空。
是否有可能做到这样的事情而不再使用另一个偏移再次执行查询,直到达到限制为止?
示例:
Activity.find(query)
.skip(offset)
.limit(limit)
.sort({timestamp: -1})
.populate('source')
.exec()
偏移量和限制用于无限滚动功能。
我试过的是这个:
Activity.find(query)
.skip(offset)
.populate('source').
.where('source.active').equals(true)
.limit(limit)
.sort({timestamp: -1})
.exec()
答案 0 :(得分:0)
您可以填充多个文档:
您可以通过指定path
,match
来填充多个文档,您可以在其中选择有效文档,也可以使用options
:
Activity
.find(query)
.skip(offset)
.populate({
path: 'source',
match: {
active: true
}
})
.limit(limit)
.sort({
timestamp: -1
})
.exec()
有关详细信息,请查看文档http://mongoosejs.com/docs/populate.html
答案 1 :(得分:0)
问题的解决方案是使用mongoose(https://docs.mongodb.com/manual/aggregation/)的聚合框架。
之后,代码如下(简化):
Activity.
.aggregate([
{
$lookup: {
from: 'users',
localField: 'source',
foreignField: '_id',
as: 'user_docs'
}
},
{
$match: {
user_docs: {
$elemMatch: {
active: true
}
}
},
{$limit: options.limit},
{$sort: {timestamp: -1}}
]);
之后可以通过Model.populate(结果,路径)完成额外的人口。