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
解决方案是一个带有请求
数组和三个匹配元素的文档。