如何连接两个MongoDB集合在相同的字段名称和相同的值?

cvxl0en2  于 2022-12-12  发布在  Go
关注(0)|答案(1)|浏览(135)

我在MongoDB数据库中有两个集合,当我搜索一个数字时,我想在同一个字段值上连接这两个集合。下面是我的集合结构:
第一个集合的名称是users:

{
user_id : "1234",
phone_number: "+9600000000000"
}

第二个集合的名称为users_info:

{
name : "John Smith",
phone_number: "+9600000000000",
age: "45",
address: "DC"
}

我想创建一个查询,将phone_number等于某个值的两个集合联接起来。结果类似于以下内容:

{
user_id : "1234",
name :"John Smith",
phone_number: "+9600000000000",
age: "45",
address: "DC"
}
7bsow1i6

7bsow1i61#

这里有一个方法。

db.users.aggregate([
  {
    "$match": {
      "phone_number": "+9600000000000"
    }
  },
  {
    "$lookup": {
      "from": "users_info",
      "localField": "phone_number",
      "foreignField": "phone_number",
      "as": "user_info",
      "pipeline": [
        {"$unset": "_id"}
      ]
    }
  },
  {
    "$replaceWith": {
      "$mergeObjects": [
        "$$ROOT",
        {"$first": "$user_info"}
      ]
    }
  },
  {
    "$unset": ["_id", "user_info"]
  }
])

mongoplayground.net上试试。
如果在"$unset"可用时MongoDB服务器版本低于4.2,则可以使用"$project",如下所示。

db.users.aggregate([
  {
    "$match": {
      "phone_number": "+9600000000000"
    }
  },
  {
    "$lookup": {
      "from": "users_info",
      "localField": "phone_number",
      "foreignField": "phone_number",
      "as": "user_info",
      "pipeline": [
        {
          "$project": {
            "_id": 0
          }
        }
      ]
    }
  },
  {
    "$replaceWith": {
      "$mergeObjects": [
        "$$ROOT",
        {"$first": "$user_info"}
      ]
    }
  },
  {
    "$project": {
      "_id": 0,
      "user_info": 0
    }
  }
])

mongoplayground.net上试试。

相关问题