首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mongodb中模拟简单的连接

如何在mongodb中模拟简单的连接
EN

Stack Overflow用户
提问于 2020-11-10 13:33:11
回答 1查看 28关注 0票数 0

我有两个与公司信息相对应的集合,每个集合都有另一个没有的信息。所以我要做的就是简单地将两个集合合并成一个拥有所有信息的集合。

示例:

Collection_1有类似的记录

代码语言:javascript
复制
{
  "_id": {
    "$oid": "5f7db2adfa8c217420d32560"
  },
  "Company": "moby group",
  "Country": "Afghanistan",
  "Industry": "Media",
  "Status": "Done",
  "Links": [
    "https://mobygroup.com/",
    "https://en.wikipedia.org/wiki/Moby_Media_Group",
    "https://en.wikipedia.org/wiki/Moby",
    "https://www.amazon.com/Moby-Group-Darya/dp/B08BLQDRTZ"
  ]
}

Collection_2有类似的记录

代码语言:javascript
复制
{
  "_id": {
    "$oid": "5faa792d78a49486fdf4f605"
  },
  "Company": "moby group",
  "domain": "mobygroup.com",
  "year founded": 2003,
  "industry": "broadcast media",
  "size range": "201-500",
  "country": "afghanistan",
  "linkedin url": "linkedin.com/company/moby-group",
  "current employee estimate": 165,
  "total employee estimate": 324
}

我希望将公司名称上的Collection_1和Collection_2合并到一个集合中,如下所示:

代码语言:javascript
复制
{
  "_id": {
    "$oid": "..."
  },
  "Company": "moby group",
  "domain": "mobygroup.com",
  "year founded": 2003,
  "industry": "broadcast media",
  "size range": "201-500",
  "country": "afghanistan",
  "linkedin url": "linkedin.com/company/moby-group",
  "current employee estimate": 165,
  "total employee estimate": 324,
  "Status": "Done",
  "Links": [
    "https://mobygroup.com/",
    "https://en.wikipedia.org/wiki/Moby_Media_Group",
    "https://en.wikipedia.org/wiki/Moby",
    "https://www.amazon.com/Moby-Group-Darya/dp/B08BLQDRTZ"
  ]
}

换句话说,我希望使用集合2中的所有字段,再加上集合1中的“状态”和“链接”字段。从我的研究中,我发现MongoDB不允许一个人轻松地完成这个任务,而且我发现使用查找和解压聚合的方法是很麻烦的,但是我无法将我的注意力集中在这个流程上。

有人能给我解释一下我是怎么做到的吗?

EN

回答 1

Stack Overflow用户

发布于 2020-11-10 13:51:13

可以使用$lookup合并集合。

您需要一个类似于以下内容的查询:

代码语言:javascript
复制
db.coll2.aggregate([
  {
    "$lookup": {
      "from": "coll1",
      "localField": "Company",
      "foreignField": "Company",
      "as": "joinCollection"
    }
  },
  {
    "$addFields": {
      "Status": {
        "$arrayElemAt": [
          "$joinCollection.Status",
          0
        ]
      },
      "Links": {
        "$arrayElemAt": [
          "$joinCollection.Links",
          0
        ]
      }
    }
  },
  {
    "$unset": "joinCollection"
  }
])

这个查询使用join在两个集合之间执行一个$lookup。它将集合按Company字段合并并存储到一个名为joinCollection的变量中。

然后,查询添加您想要的字段:StatusLinks,并删除字段joinColeection,以获得您想要的对象。

这是一个示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64769931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档