【问题标题】:merge multiple documents into one document with both document fields in MongoDB将多个文档合并为一个文档,其中包含 MongoDB 中的两个文档字段
【发布时间】:2021-04-23 00:10:45
【问题描述】:

我在 MobgoDB 中有多个文档 如何对“abc”和“xyz”上的组进行操作并获取一个文档。请参阅“输出文件”。 需要与 (Document 1 U Document 2) 和 (Document 1 U Document 3) 进行联合。 U=联合

文档 1

{
    "data": {
      "Inside_data": {
        "project": {
          "abc": {
            "alpha": 4,
            "beta" : 45
          },
          "xyz": {
            "alpha": 214,
            "beta" : 431
          }
        }
      }
    }
}

文档 2

    "Deal": {
         "name": "abc",
         "url" : "www.abc.com,
         "email": [ "abc@gmail.com"],
         "total": 2
    }

文档 3

    "Deal": {
         "name": "xyz",
         "url" : "www.googl.com,
          "email": [ "xyz@gmail.com"],
          "total": 25
    }

预期输出。

{
{
         "name": "abc",
         "url" : "www.abc.com,
          "email": "abc@gmail.com",
          "total": 2,
          "alpha": 4,
          "beta" : 45

    },
{
         "name": "xyz",
         "url" : "www.googl.com,
          "email": "xyz@gmail.com",
          "total": 25,
          "alpha": 214,
          "beta" : 431

    }
}

【问题讨论】:

  • 它们都在同一个集合中吗?
  • 是的,这一切都在一个集合中。和多个文件
  • 我建议您更改数据库架构设计,这可能会导致性能问题和非托管查询。
  • 看看这个playground我不知道它是什么概念和结构。

标签: arrays mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:
db.collection.aggregate([
  {
    $match: {
      Deal: {
        $exists: true
      }
    }
  },
  {
    $lookup: {
      from: "collection",
      let: {
        name: "$Deal.name"
      },
      pipeline: [
        {
          $match: {
            data: {
              $exists: true
            }
          }
        },
        {
          $project: {
            data: {
              $reduce: {
                input: {
                  $objectToArray: "$data.Inside_data.project"
                },
                initialValue: {},
                in: {
                  $cond: [
                    {
                      $eq: [
                        "$$this.k",
                        "$$name"
                      ]
                    },
                    "$$this.v",
                    "$$value"
                  ]
                }
              }
            }
          }
        },
        {
          $project: {
            _id: 0,
            alpha: "$data.alpha",
            beta: "$data.beta"
          }
        }
      ],
      as: "Deal.data"
    }
  },
  {
    $unwind: "$Deal.data"
  }
])

@turivishal 的回答

【讨论】:

    猜你喜欢
    • 2015-05-03
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2023-03-15
    相关资源
    最近更新 更多