【问题标题】:how to replace the root with object value in MongoDB如何在MongoDB中用对象值替换根
【发布时间】:2023-04-04 18:54:01
【问题描述】:

文档 1:

{
  "data": {
    "id": "123456",
    "name": "abc",
    "value": 1
  }
}

预期输出-

{
  "abc": {
    "id": "123456",
    "name": "abc",
    "value": 1
  }
}

解释:我们如何用" name" 值替换根,检查预期的输出,无论"name" 的值是什么,它都会变成根级别。我有多个文件。 提前致谢。

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    您可以通过$project 聚合实现此目的。应该是这样的:

    { $project: { "$data.name": "$data" } }
    

    【讨论】:

      【解决方案2】:

      Mongo 不允许字段名称以 $ 开头,这意味着您不能定义动态键名。

      你必须通过使用数据结构来解决这个限制,这里是一个如何使用$arrayToObject实现这一点的示例

      db.collection.aggregate([
        {
          "$replaceRoot": {
            "newRoot": {
              "$arrayToObject": [
                [
                  {
                    k: "$data.name",
                    v: "$data"
                  }
                ]
              ]
            }
          }
        }
      ])
      

      Mongo Playground

      【讨论】:

        猜你喜欢
        • 2021-05-30
        • 2020-10-15
        • 2021-01-08
        • 1970-01-01
        • 2020-11-08
        • 2012-03-18
        • 2019-09-17
        • 2021-09-29
        • 1970-01-01
        相关资源
        最近更新 更多