使用聚合管道在MongoDB中将一个集合中的功能添加到另一个中

影鹰

我有两个集合usersgroups这些都与另一个。一个用户只能在一个组中,而一个组可以包含多个用户。

Document A in users

{
  _id: 1234,
  name: "John Doe"
}

Document B in users

{
  _id: 2345,
  name: "Jane Roe"
}

Document G in groups

{
  _id: 3456,
  name: "A Group",
  members: [ObjectId("1234"), ObjectId("2345")]
}

现在,我想使用集合上的“聚合管道”users将字段添加_group到每个用户以进行进一步处理。添加的字段应包含用户所属组的ID。

Result for Document A

{
  _id: 1234,
  name: "John Doe",
  _group: ObjectId("3456")
}

Result for Document B

{
  _id: 2345,
  name: "Jane Roe",
  _group: ObjectId("3456")
}

我真的不知道从哪里开始以及如何按照我描述的方式将这两个集合结合在一起。

伊戈尔克

这应该可以解决问题(https://mongoplayground.net/p/Iu53HQbi7Me):

测试数据:

// users collection
[
    {
      _id: ObjectId("5a934e000102030405000001"),
      name: "John Doe"
    },
    {
      _id: ObjectId("5a934e000102030405000002"),
      name: "Jane Roe"
    }
]

// groups collection
[
    {
      _id: 100,
      name: "A Group",
      members: [
        ObjectId("5a934e000102030405000001"),
        ObjectId("5a934e000102030405000002")
      ]
    }
]

查询:

db.users.aggregate([
// join the two collections
  {
    $lookup: {
      "from": "groups",
      "localField": "_id",
      "foreignField": "members",
      "as": "membersInfo"
    }
  },
// unwind the membersInfo array
  {
    $unwind: "$membersInfo"
  },
  {
    $project: {
      "_id": {
        $cond: {
          "if": {
            $in: [
              "$_id",
              "$membersInfo.members" // replace _id field based on the members
            ]
          },
          "then": "$_id",
          "else": "No group"
        }
      },
      "name": 1, // mantain this field
      "_group": "$membersInfo._id" // create _group field using the _id of groups collection
    }
  }
])

结果:

[
  {
    "_group": 100,
    "_id": ObjectId("5a934e000102030405000001"),
    "name": "John Doe"
  },
  {
    "_group": 100,
    "_id": ObjectId("5a934e000102030405000002"),
    "name": "Jane Roe"
  }
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从1个arraylist中删除对象并添加到另一个

将一个列表添加到Java中的另一个列表?

[闪亮]:在另一个tabPanel中将链接添加到另一个tabPanel

在JAVA中将列表对象添加到另一个列表中

如何在Python3中将一个列表中的元素添加到另一个列表中?

如何将对象添加到另一个对象的集合中?

如何在R中将一个表中的值列表添加到另一个表中?

将一个表中的列添加到另一个表

如何将集合添加到Cloud Firestore中的另一个集合?

如何使用PyMongo有条件地复制一个集合中的字段并将其添加到MongoDB中的另一个字段?

如何将另一个孩子添加到我的Firebase集合中?

Mongo DB:如何从一个集合中复制文档并将其作为字段添加到另一个集合中的相关文档中?

将一个xml元素添加到另一个xml中

如何在Javascript中将一个数组添加到另一个数组中?

根据mongodb中另一个数组字段的值将数组字段添加到集合中

如何在一个表中将NEW值与另一个表中的值添加到第三个表中?

Mongodb将一个集合复制到另一个集合中

如何在gradle中将本地jar依赖项添加到另一个依赖项中?

将对象集合添加到另一个集合

如何添加到另一个页面中的集合?

如何检索一个集合中的值并将其添加到另一个集合中.. Mongoose , Node JS

在javascript中将一个对象添加到另一个对象

在 C 中将一个数组中的所有其他元素添加到另一个数组中

将项目添加到一个 goroutine 中的通道并在另一个 goroutine 中处理

MongoDB 使用另一个集合中的另一个字段更新字段

如何使用mongodb中主集合的objectID在另一个集合中查找

基于另一个集合中的条件聚合

将另一个海龟的 id 添加到另一个海龟的属性中

如何在javascript中将元素和对象添加到另一个中