MongoDB选择聚合管道中field1等于nested.field2的文档
我使用“$lookup”在一个字段上加入了两个集合,而实际上我需要两个字段来进行唯一匹配。我的下一步是展开包含唯一匹配所需的第二个字段的不同值的数组,然后将这些值与需要匹配的第二个字段的值进行比较。但是,下面代码段中的第二行不返回任何结果MongoDB选择聚合管道中field1等于nested.field2的文档,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我使用“$lookup”在一个字段上加入了两个集合,而实际上我需要两个字段来进行唯一匹配。我的下一步是展开包含唯一匹配所需的第二个字段的不同值的数组,然后将这些值与需要匹配的第二个字段的值进行比较。但是,下面代码段中的第二行不返回任何结果 // Request only the page that has been viewed { '$unwind' : '$DSpub.PublicationPages'}, { '$match' : {'pageId' : '$DSpub.Publicat
// Request only the page that has been viewed
{ '$unwind' : '$DSpub.PublicationPages'},
{ '$match' : {'pageId' : '$DSpub.PublicationPages.PublicationPageId' } }
有没有更合适的方法?或者我可以在执行“$lookup”之前展开“from”集合,然后匹配这两个字段,从而完全避免这样做吗?这看起来并不容易
$match
不对动态数据进行操作(这意味着我们将静态值与数据集进行比较)。为了克服这一点,我们可以使用$project phase添加bool静态标志,$match
请参见下面的示例:
具有如下输入集合:
[{
"_id" : ObjectId("56be1b51a0f4c8591f37f62b"),
"name" : "Alice",
"sub_users" : [{
"_id" : ObjectId("56be1b51a0f4c8591f37f62a")
}
]
}, {
"_id" : ObjectId("56be1b51a0f4c8591f37f62a"),
"name" : "Bob",
"sub_users" : [{
"_id" : ObjectId("56be1b51a0f4c8591f37f62a")
}
]
}
]
我们只想获取\u id
和$docs.sub\u用户。\u id“
相同的字段,其中文档
是$lookup
输出
db.collecction.aggregate([{
$lookup : {
from : "collecction",
localField : "_id",
foreignField : "_id",
as : "docs"
}
}, {
$unwind : "$docs"
}, {
$unwind : "$docs.sub_users"
}, {
$project : {
_id : 0,
fields : "$$ROOT",
matched : {
$eq : ["$_id", "$docs.sub_users._id"]
}
}
}, {
$match : {
matched : true
}
}
])
这就产生了输出:
{
"fields" : {
"_id" : ObjectId("56be1b51a0f4c8591f37f62a"),
"name" : "Bob",
"sub_users" : [
{
"_id" : ObjectId("56be1b51a0f4c8591f37f62a")
}
],
"docs" : {
"_id" : ObjectId("56be1b51a0f4c8591f37f62a"),
"name" : "Bob",
"sub_users" : {
"_id" : ObjectId("56be1b51a0f4c8591f37f62a")
}
}
},
"matched" : true
}
这是我的荣幸。我有一个类似的问题要解决,只是我试图匹配两个独立嵌套集合中的字段。结果发现我错过了嵌套集合管道中的$unwind阶段。感谢您的示例,因为这对我有很大帮助。干杯!