Mongodb true/false上的Mongo聚合$filter不工作

Mongodb true/false上的Mongo聚合$filter不工作,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有以下数据 { "_id":"57b5271231a5a203f8815e78", "name":"Group A", "created":new Date(1471489810155), "active":true, "invites":[ ], "requests":[ { "_id":"57b683e531a5a21679b78e6c", "created":new Date(14

我有以下数据

{  
   "_id":"57b5271231a5a203f8815e78",
   "name":"Group A",
   "created":new Date(1471489810155),
   "active":true,
   "invites":[  

   ],
   "requests":[  
      {  
         "_id":"57b683e531a5a21679b78e6c",
         "created":new Date(1471579109215),
         "user_id":"57b4c5f0291ebb23110b888e",
         "description":"Request From John",
         "active":true,
         "date":         new Date("2016-08-23T13:58:15-0700         "), 
            "         denied_users":[  

         ]
      },
      {  
         "_id":"57b683e531a5a21679a78e6c",
         "created":new Date(1471579109215),
         "user_id":"57b4c5f0291ebb13110b888e",
         "description":"Request A",
         "active":true,
         "date":         new Date("2016-08-23T13:58:15-0700         "), 
            "         denied_users":[  

         ]
      },
      {  
         "_id":"57b6841231a5a21679a78e6d",
         "created":new Date(1471579154271),
         "user_id":"57b4c5f0291ebb13110b888e",
         "description":"Request B",
         "active":true,
         "date":         new Date("2016-08-26T13:59:07-0700         "), 
            "         denied_users":[  

         ]
      }
   ],
   "fulfillments":[  

   ]
}
我正在运行以下查询,以
检索所有具有active=true的嵌入式请求对象。不过,没有归还任何东西

db.groups.aggregate(
  [
    { $project : { "requests" : 1 }},
    { $unwind : "$requests" },
    { $project: {
        "requests": {
           "$filter": {
              "input": "$requests",
              "as": "item",
              "cond": { $eq: [ "$$item.active",true ] }
          }
        }
      }
    }
  ]
)
我做错了什么

更新

如果我这样做会更容易吗

[
     { $project : { "requests" : 1 }},
     { $unwind : "$requests" }, 
     { $match : { "requests.active" : true } }
]

您只需从管道中删除
$unwind
阶段:

db.groups.aggregate(
  [
    { $project: {
        "requests": {
           "$filter": {
              "input": "$requests",
              "as": "item",
              "cond": { $eq: [ "$$item.active",true ] }
          }
        }
      }
    }
  ]
)

否则,
$unwind
会将数组中的
requests
字段更改为单个对象,因为它复制了无法与
$filter
一起使用的文档。您只需从管道中删除
$unwind
阶段:

db.groups.aggregate(
  [
    { $project: {
        "requests": {
           "$filter": {
              "input": "$requests",
              "as": "item",
              "cond": { $eq: [ "$$item.active",true ] }
          }
        }
      }
    }
  ]
)
否则,
$unwind
会将数组中的
requests
字段更改为单个对象,因为它复制了不能与
$filter
一起使用的文档。您的“更新”解决方案与它输出三个单独的文档不同,每个文档都有一个
request
对象,而
$filter
解决方案是一个包含
请求
数组和三个匹配元素的文档。您的“更新”解决方案不同于它将输出三个单独的文档,每个文档都有一个
请求
对象,而
$filter
解决方案是一个带有
请求
数组和三个匹配元素的文档。