在一个查询中计算和匹配相关文档

时间:2016-03-30 14:42:21

标签: mongodb mongodb-query aggregation-framework

我有两个集合:TestsReports。它们是相关的,ReportsTest.id进行了现场测试。每个Test文档都有testers_count字段。

此外,我写的查询应仅返回Tests testers_count大于或等于相关count文档的Reports

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

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

1 个答案:

答案 0 :(得分:1)

很确定你的意思是:

db.test.aggregate([
  { "$lookup": {
    "from": "reports",
    "localField": "_id",
    "foreignField": "test",
    "as": "reportsList"
  }},
  { "$redact": {
    "$cond": {
      "if": { 
        "$gte": [ 
            "$settings.testers_count",
            { "$size": "$reportsLIst" }
        ]
      },
      "then": "$$KEEP",
      "else": "$$PRUNE"
    }
  }}
])

假设$settings.testers_count实际上解析为“单数”属性,并且不是“数组”的成员。

其中使用$redact而使用$gte的“逻辑”形式进行评估。

$size运算符也只能用于$redact允许的评估表达式。 $match运算符与.find()的概念和运算符语法实际上是相同的,因为它执行“查询”,并且实际上只能使用“查询运算符”和计算出的逻辑表达式。

这是$redact实际上的用途。它是$match

的“逻辑表达式”形式