Mongodb 在一次查询中统计并匹配相关文档

Mongodb 在一次查询中统计并匹配相关文档,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有两个集合:测试和报告。它们是相关的,报告使用test.id进行现场测试。每个Test文档都有testers\u count字段 此外,我还编写了一个查询,该查询应仅返回测试,且测试人员计数大于或等于相关报告文档的计数 db.test.aggregate([ { $lookup: { from: 'reports', localField: '_id', foreignField: 'test',

我有两个集合:
测试
报告
。它们是相关的,
报告
使用
test.id
进行现场测试。每个
Test
文档都有
testers\u count
字段

此外,我还编写了一个查询,该查询应仅返回
测试
,且
测试人员计数
大于或等于相关
报告
文档的
计数

db.test.aggregate([
    {
      $lookup:
        {
          from: 'reports',
          localField: '_id',
          foreignField: 'test',
          as: 'reportsList'
        }
    },
    {
       $match: {
        "settings.testers_count": {$gte: {$size: "$reportsList"}}
       }
    }
])

问题是代码不起作用,也不会返回任何错误。

很确定您的意思是:

db.test.aggregate([
{“$lookup”:{
“发件人”:“报告”,
“localField”:“\u id”,
“外域”:“测试”,
“作为”:“报告列表”
}},
{“$redact”:{
“$cond”:{
“如果”:{
“$gte”:[
“$settings.testers\u count”,
{“$size”:“$reportsLIst”}
]
},
“然后”:“$$KEEP”,
“else”:“$$PRUNE”
}
}}
])
假定
$settings.testers\u count
实际上解析为“单数”属性,并且不是“数组”的成员

而是使用和的“逻辑”形式进行评估

此外,运算符只能在允许的计算表达式中使用。运算符在概念和运算符语法上与
.find()
完全相同,因为它执行“查询”,并且实际上只能使用“查询运算符”和no计算逻辑表达式


这才是真正的目的。这是一个“逻辑表达式”形式的

集合名为
Reports
Reports
?@Blakes您是对的,$match是“不正确的”。据我所知,值应该是数字或字符串。但是如果没有错误,这是一个很难理解的问题(这就是为什么这个问题有一个“答案”。
$match
在这个上下文中不是正确的用法。