【问题标题】:How to combine a collection with the object of a different collection without relation in MongoDB?如何在 MongoDB 中将集合与没有关系的不同集合的对象组合?
【发布时间】:2021-09-03 08:21:22
【问题描述】:

我有 2 个收藏;

//db.cities.find({})

/* 1 */
{
    "_id" : ObjectId("/*...*/"),
    "Name" : "Istanbul"
}

/* 2 */
{
    "_id" : ObjectId("/*...*/"),
    "Name" : "Ankara"
}

/* 3 */
{
    "_id" : ObjectId("/*...*/"),
    "Name" : "Izmir"
}

/* 4 */
{
    "_id" : ObjectId("/*...*/"),
    "Name" : "Eskisehir"
}
//db.dates.find({})

/* 1 */
{
    "_id" : "Turkey",
    "dateTime": "2021-09-03 10:25"
}

/* 2 */
{
    "_id" : "England",
    "dateTime": "2021-09-03 08:25"
}

我想合并两个集合,但不像inner join

这是我想看到的结果;

//the output that I need

{
    "_id" : ObjectId("/*...*/"),
    "Cities": [
        {
            "_id" : ObjectId("/*...*/"),
            "Name" : "Istanbul"
        },
        {
            "_id" : ObjectId("/*...*/"),
            "Name" : "Ankara"
        },
        {
            "_id" : ObjectId("/*...*/"),
            "Name" : "Izmir"
        },
        {
            "_id" : ObjectId("/*...*/"),
            "Name" : "Eskisehir"
        }
    ],
    "DateTime" : "2021-09-03 10:25"
}

因此,我不想在所有 cities 元素中看到 DateTime。 如何在 MongoDB v3.2 中获得此结果?

注意 1:cities 集合没有 Country 字段。我可以在查询中将Turkey 写成硬编码。

注意 2:如果可能的话,我更喜欢 aggregate 而不是 map-reduce。

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    从 3.6 开始,MongoDB 允许执行 Subqueries

    试试这个:

    db.dates.aggregate([
      {
        "$lookup": {
          "from": "cities",
          "pipeline": [],
          "as": "Cities"
        }
      },
      {
        $match: {
          _id: "Turkey"
        }
      },
      {
        "$addFields": {
          _id: "$$REMOVE",
          "Country": "Turkey"
        }
      }
    ])
    

    MongoPlayground

    【讨论】:

    • 有没有办法从cities聚合?因为我需要使用cities 的管道,但我使用的MongoDB 版本是3.2。所以我不能在你的解决方案中使用cities 的管道。
    • @TolgaCakir 子查询自 3.6 起被允许(您可以在此处定义您的管道 "pipeline": [],)。不幸的是,您需要迁移到 3.6。 $lookup没有以前版本的条件就没有办法
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多