Mongodb 按其他集合的筛选器分组
我正在使用流星和MongoDB。我需要使用聚合发布(我使用的是jcbernack:ReactiveAggregate和ReactiveAggregate) ])Mongodb 按其他集合的筛选器分组,mongodb,meteor,aggregation-framework,Mongodb,Meteor,Aggregation Framework,我正在使用流星和MongoDB。我需要使用聚合发布(我使用的是jcbernack:ReactiveAggregate和ReactiveAggregate) ]) 在客户端上,我只得到数据部分(限制6)。因此,我必须计算服务器端所有数据的数量。我不能使用find().count(),因为在没有聚合的find()调用中,我不能使用与其他集合关联的筛选器(如{'matches.score':{'gte':60})。我如何计算以这种方式过滤的数据?可能需要在管道中使用$group?您在问什么?如何获取什
在客户端上,我只得到数据部分(限制6)。因此,我必须计算服务器端所有数据的数量。我不能使用
find().count()
,因为在没有聚合的find()
调用中,我不能使用与其他集合关联的筛选器(如{'matches.score':{'gte':60}
)。我如何计算以这种方式过滤的数据?可能需要在管道中使用$group?您在问什么?如何获取什么的计数?如果您只需要计数,请使用{“$group”:{“\u id”:null,“count”:{“$sum”:1}运行另一个聚合
在$match
阶段之后,而不是在其他管道阶段之后。但是请不要在一个请求中尝试这样做。或者甚至要求这样做。Neil Lunn,我需要计算给定筛选器的作业数{$match:{'matches.score':{'$gte':60}
。如果我使用{$group:{id::null,“count':{$sum:1}
然后我得到所有不带过滤器的数据的计数。这是一个“管道阶段”。同样使用上述聚合管道,但不要使用$sort、$limit
阶段,只需在$match
之后,用我刚才给你的$group
替换这些阶段。然后在应用$lookup
和$match
之后,你就可以计算文档了。因此$lookup->$match->$match->$g然后,组应该是计数的新管道。哦,它真的很有效!我应该了解我自己。非常感谢!
db.getCollection('Jobs').aggregate([
{
$lookup:
{
from: "JobMatches",
localField: "_id",
foreignField: "jobId",
as: "matches"
}
},
{ $project:
{
matches: {
'$filter': {
input: '$matches',
as: 'match',
cond: { '$and': [{$eq: ['$$match.userId', userId]}]}
}
}
}
},
{$match: { 'matches.score': { '$gte': 60 }},
{$sort: { "matches.score": -1 }},
{$limit: 6}