【发布时间】:2017-03-28 05:56:51
【问题描述】:
我需要查找从 First Collection 到 SecondCollection 的 MIF。
FirstCollection . . . { "_id" : ObjectId("58d24e8a0f8df93aa0e2ea3c"), "logR" : { "clientIP1" : "0.0.0.0", "clientIP2" : "0.0.0.0", "clientIP3" : "0.0.0.0" }, "test" : [ { "logR" : { "MIF" : "123" } } ] } . . . SecondCollection . . . { "_id" : ObjectId("58d90176bf95238e215f76fc"), "MIFDetails" : [ { "MIF" : "123" } ] } . . .我尝试了以下但还没有成功。
db.FirstCollection.aggregate([
{
$unwind: "$test"
},
{
$unwind: "$MIFDetails"
},
{
$lookup:
{
from: "SecondCollection",
localField: "test",
foreignField: "MIFDetails",
as: "result"
}
},
{
$match: { "result": { $ne: [] } }
},
{
$out : "resultCollection"
}
])
我希望得到以下输出
{
"_id" : ObjectId("58d24e8a0f8df93aa0e555dd"),
"logR" : {
"clientIP1" : "0.0.0.0",
"clientIP2" : "0.0.0.0",
"clientIP3" : "0.0.0.0"
},
"test" : [
{
"logR" : {
"MIF" : "123"
}
}
],
"result" : [
{
"_id" : ObjectId("58d90176bf95238e215f76fc"),
"MIFDetails" : [
{
"MIF" : "123"
}
]
}
}
两个集合的 MIF 匹配,因此结果。这些集合在同一个数据库中。
【问题讨论】:
-
第二个$unwind: "$MIFDetails",但是在第一个集合中没有"MIFDetails",所以在第二个$unwind 将不会返回任何结果并且进一步不会有数据作为输入管道。所以查询不会返回聚合数据。
-
@SureshMahawar 但是我如何展开第二个集合的 MIFDetails ?
-
@SureshMahawar 因为 MIFDetails 也是一个数组。如果有的话,你能建议一个不同的查询吗?
标签: mongodb mongodb-query aggregation-framework