查找与对象匹配的一对多关系

时间:2016-04-11 13:54:24

标签: javascript mongodb

我有一个用mongodb练习的聚会克隆。我对mongodb聚合的$lookup阶段很感兴趣。我有一个非规范化的文档,如下所示:

{
  _id: ObjectId(),
  createdAt: ISODate(),
  description: "Group for people who like kittens",
  members: [ ObjectId(), ObjectId() ]
}

我的目标是从收藏集members中查找users并加入他们,就像这样:

{
  _id: ObjectId(),
  createdAt: ISODate(),
  description: "Group for people who like kittens.",
  members: [{
    _id: ObjectId(),
    name: "Jeff"
  }, {
    _id: ObjectId(),
    name: "Tim"
  }]
}

当我尝试在数组上执行$lookup时,它不会产生任何结果,所以我$unwind给了我几个我必须分组的文档。

db.meetups.aggregate([
  { $match: { "_id": id } },
  { $unwind: "$users" },
  {
    $lookup: {
      from: "members",
      localField: "users",
      foreignField: "_id",
      as: "members"
    }
  },
  {
    $group: {
      _id: "$_id",
      members: { $push: "$members" }
    }
  }
], /** ... */);

问题是这总是产生一个带有单个元素的数组,因为我只期望一个元素。我尝试使用$group运算符,但它只是一个填充单个元素数组而不是一系列对象的数组

mongo 3.2是如何完成的?

0 个答案:

没有答案