我在名为foos
的集合中有一个MongoDB 3.2文档。该文件如下:
{
_id: "foo1",
fooProp: "some prop"
barKey: ["key1","key2"]
}
我希望aggregate
函数与$lookup
一起使用bars
字段将此文档与另一个名为barKey
的集合中的另外两个文档相关联。这两个文件看起来像这样:
{
_id: "bar1",
barKey: "key1",
barProp: "some prop 2"
},
{
_id: "bar2",
barKey: "key2",
barProp: "some prop 3"
}
因此,barKey
文档的foo
数组中的字符串均与具有相同bar
值的barKey
文档匹配。
最初,我使用的是MongoDB 3.4 ,我能够使用这个简单的查询来获得所需的结果:
//mongo 3.4 query (working)
db.foos
.aggregate([
{
$lookup: {
from: "bars",
localField: "barKey",
foreignField: "barKey",
as: "barData"
}
}
])
结果(理想结果)看起来像:
//mongo 3.4 ideal result
{
_id: "foo1",
fooProp: "some prop"
barKey: ["key1","key2"],
barData: [
{
_id: "bar1",
barKey: "key1",
barProp: "some prop 2"
},
{
_id: "bar2",
barKey: "key2",
barProp: "some prop 3"
}
]
}
但是,在MongoDB 3.2 中,同一查询会为[]
生成一个空数组barData
。
我为$unwind
数组添加了barKey
步骤:
//mongo 3.2 query (partly working)
db.foos
.aggregate([
{ $unwind: "$bldgKey" },
{
$lookup: {
from: "bars",
localField: "barKey",
foreignField: "barKey",
as: "barData"
}
}
])
...部分有效,但现在结果为foos
集合中bars
集合中的每个文档都有重复的文档,而不是将bars
文档嵌套在一个文档中foos
文件:
//mongo 3.2 less-than-ideal result
{
_id: "foo1",
fooProp: "some prop"
barKey: ["key1","key2"],
barData: [
{
_id: "bar1",
barKey: "key1",
barProp: "some prop 2"
}
]
},
{
_id: "foo1",
fooProp: "some prop"
barKey: ["key1","key2"],
barData: [
{
_id: "bar2",
barKey: "key2",
barProp: "some prop 3"
}
]
}
Mongo 3.2中使用更简单的查询获得Mongo 3.4中理想结果的最佳方式是什么?
如果我使用$group
,我宁愿不必在结果中列出我想要的每个字段,如果可能的话,只需从文档中获取所有字段。我在这里给出的foo-bar示例是现实世界文档的简化示例,每个文档都包含许多不同的字段,这些字段可能因文档而异。