Arrays 在MongoDB 3.2中使用aggregate,并基于值数组使用$lookup进行匹配

Arrays 在MongoDB 3.2中使用aggregate,并基于值数组使用$lookup进行匹配,arrays,mongodb,mongodb-query,aggregation-framework,Arrays,Mongodb,Mongodb Query,Aggregation Framework,我在名为foos的集合中有一个MongoDB 3.2文档。该文档如下所示: { _id: "foo1", fooProp: "some prop" barKey: ["key1","key2"] } { _id: "bar1", barKey: "key1", barProp: "some prop 2" }, { _id: "bar2", barKey: "key2", barProp: "some prop 3" } 我想使用aggregate函数和$

我在名为
foos
的集合中有一个MongoDB 3.2文档。该文档如下所示:

{
  _id: "foo1",
  fooProp: "some prop"
  barKey: ["key1","key2"]
}
{
  _id: "bar1",
  barKey: "key1",
  barProp: "some prop 2"
},
{
  _id: "bar2",
  barKey: "key2",
  barProp: "some prop 3"
}
我想使用
aggregate
函数和
$lookup
将此文档与另一个名为
bar
的集合中的两个其他文档通过其
barKey
字段连接起来。这两个文档如下所示:

{
  _id: "foo1",
  fooProp: "some prop"
  barKey: ["key1","key2"]
}
{
  _id: "bar1",
  barKey: "key1",
  barProp: "some prop 2"
},
{
  _id: "bar2",
  barKey: "key2",
  barProp: "some prop 3"
}
因此
foo
文档的
barKey
数组中的字符串都与具有相同
barKey
值的
bar
文档相匹配

最初,我使用的是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
生成一个空数组
[]

我为
barKey
数组添加了
$unwind
步骤:

//mongo 3.2 query (partly working)

db.foos
  .aggregate([
    { $unwind: "$bldgKey" },
    {
      $lookup: {
        from: "bars",
        localField: "barKey",
        foreignField: "barKey",
        as: "barData"
      }
    }
  ])
…这部分起作用,但现在结果是
foos
集合中的每个文档都有来自
bar
集合的重复文档,而不是将
bar
文档嵌套在单个
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中,使用更简单的查询获得理想结果的最佳方法是什么?

如果我使用
$group
,我希望不必列出结果中需要的每个字段,只要从文档中不可知地获取所有字段(如果可能)。我在这里给出的foobar示例是一个简化的现实世界文档示例,每个文档都包含几十个不同的字段,这些字段可能因文档而异