我有一个猫鼬查询,其中我将结果数限制为说3个条目。我的问题是,每个对象都被嵌套对象填充。该嵌套对象具有"活动" -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()
您可以填充多个文档:您可以通过指定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
解决问题的解决方案是使用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}}
]);
以后可以通过模型进行额外的人群。