Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MongoDB中过滤聚合元素?_Mongodb - Fatal编程技术网

如何在MongoDB中过滤聚合元素?

如何在MongoDB中过滤聚合元素?,mongodb,Mongodb,在官方的mongo文档中,有一个示例演示了$graphLookup,该示例在每个结果元素中包含reportingHierarchy字段。但如何过滤某些关键帧内设置的最终元素 { "_id": 1, "name": "Dev", final: false } { "_id": 2, "name": "Eliot", "reportsTo" : "Dev", final: false } { "_id": 3, "name": "Ron", "reportsTo" : "Eliot", final:

在官方的mongo文档中,有一个示例演示了
$graphLookup
,该示例在每个结果元素中包含
reportingHierarchy
字段。但如何过滤某些关键帧内设置的最终元素

{ "_id": 1, "name": "Dev", final: false }
{ "_id": 2, "name": "Eliot", "reportsTo" : "Dev", final: false }
{ "_id": 3, "name": "Ron", "reportsTo" : "Eliot", final: false }
{ "_id": 4, "name": "Andrew", "reportsTo" : "Eliot", final: false }
{ "_id": 5, "name": "Asya", "reportsTo" : "Ron", final: true }
{ "_id": 6, "name": "Dan", "reportsTo" : "Andrew", final: true }
我需要向这个查询添加什么,以确定我只对带有
final:true
param的记录感兴趣,但仍然获得所有
reportingHierarchy

db.employees.aggregate( [
   ???
   {
      $graphLookup: {
         from: "employees",
         startWith: "$reportsTo",
         connectFromField: "reportsTo",
         connectToField: "name",
         as: "reportingHierarchy"
      }
   }
] )
预期产出:

{ "_id": 5, "name": "Asya", "reportsTo" : "Ron", final: true,
    "reportingHierarchy": [
        { "_id": 1, "name": "Dev", final: false },
        { "_id": 2, "name": "Eliot", "reportsTo" : "Dev", final: false },
        { "_id": 3, "name": "Ron", "reportsTo" : "Eliot", final: false }
    ]
}
{ "_id": 6, "name": "Dan", "reportsTo" : "Andrew", final: true,
    "reportingHierarchy": [
        { "_id": 1, "name": "Dev", final: false },
        { "_id": 2, "name": "Eliot", "reportsTo" : "Dev", final: false },
        { "_id": 4, "name": "Andrew", "reportsTo" : "Eliot", final: false }
    ]
}

首先使用
$match
筛选出所需的记录

db.employees.aggregate([
   { 
       $match: { final: true } 
   },
   {
      $graphLookup: {
         from: "employees",
         startWith: "$reportsTo",
         connectFromField: "reportsTo",
         connectToField: "name",
         as: "reportingHierarchy"
      }
   }
])
你可以试试这个

db.employees.aggregate([{
            $match: {
                    "final": true
            }
        }, {
            $graphLookup: {
                from: "employees",
                startWith: "$reportsTo",
                connectFromField: "reportsTo",
                connectToField: "name",
                as: "reportingHierarchy"
            }
        }, {
            $addFields: {
                reportingHierarchy: {
                    $filter: {
                        input: "$reportingHierarchy",
                        as: "reportingHierarchy_field",
                        cond: {
                            $and: [{
                                    $eq: ["$$reportingHierarchy_field.final", true]
                                }
                            ]
                        }
                    }
                },
            }
        }
    ])

你能分享你的预期产出吗?我找到了一个选择,就是这样做。只要查询只是一个过滤器链,我们就可以过滤
$graphLookup
结果,就像这样:
{$match:{“final”:true}}
不知道它对不对,因为我们没有隔离初始集。@MuhammadFaizan,我刚刚更新了我的问题。这应该行得通。你为什么只在一个查询中使用
$和
。@MuhammadFaizan哦,是的,你是对的,这是我的错误。对此表示抱歉。