【问题标题】:Rename ($project) a field from an array - MongoDB [duplicate]重命名($project)数组中的字段-MongoDB [重复]
【发布时间】:2018-03-09 11:57:24
【问题描述】:

我有一个类似下面的文件,

{
    "_id" : "59ba903dacea50d0d7d47168",
    "sections" : [ 
        {
            "_id" : "59d9dd7947ce651544c5d4c1",
            "sectionName" : "Section 1"
        }, 
        {
            "_id" : "59d9dd8147ce651544c5d4c2",
            "sectionName" : "Section 2"
        }, 
        {
            "_id" : "59d9dd9747ce651544c5d4c3",
            "sectionName" : "Section 3"
        }
    ]
}

我正在使用投影将字段 _id 重命名为 id 并将 sectionName 重命名为使用查询的名称

db.getCollection('tmp').aggregate([
{$project:{"sections.id":"$sections._id", "sections.name":"$sections.sectionName"}}
])

想要的输出是:

{
    "_id": "59ba903dacea50d0d7d47168",
    "sections": [
        {"id": "59d9dd7947ce651544c5d4c1", "name": "Section 1"}, 
        {"id": "59d9dd8147ce651544c5d4c2", "name": "Section 2"}, 
        {"id": "59d9dd9747ce651544c5d4c3", "name": "Section 3"}
    ]
};

但是好像不行,我做错了什么?

请注意,我不会像 in this question 那样尝试更新此文档,我想以所需的格式投影文档。

【问题讨论】:

  • 我认为您只是语法错误。试试"$sections._id":"sections.id"
  • 语法没问题。它执行但结果不是我想要的。它使用 _id 和 sectionNames 的所有值创建数组 id 和名称。
  • 想要的输出是什么?
  • @felipsmartins 将 _.id 字段更改为 .id 我猜
  • 以下是所需的输出 { "_id" : "59ba903dacea50d0d7d47168", "sections" : [ { "id" : "59d9dd7947ce651544c5d4c1", "name" : "Section 1" }, { "id" :“59d9dd8147ce651544c5d4c2”,“名称”:“第 2 节”},{“id”:“59d9dd9747ce651544c5d4c3”,“名称”:“第 3 节”}]}

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

如果我理解得很好,应该通过$map 操作符来完成,像这样:

db.getCollection('section').aggregate([
    {
        $project: {
           sections: {
               $map: {
                   "input": "$sections",
                   as: "sec",
                   in: {
                       "my_id": "$$sec._id",
                       "new_section_name": "$$sec.sectionName"
                   }
               }
           }
        }
    }
])

输出如下所示:

{
  "waitedMS": NumberLong("0"),
  "result": [
    {
      "_id": "59ba903dacea50d0d7d47168",
      "sections": [
        {
          "my_id": "59d9dd7947ce651544c5d4c1",
          "new_section_name": "Section 1"
        },
        {
          "my_id": "59d9dd8147ce651544c5d4c2",
          "new_section_name": "Section 2"
        },
        {
          "my_id": "59d9dd9747ce651544c5d4c3",
          "new_section_name": "Section 3"
        }
      ]
    }
  ],
  "ok": 1
}

【讨论】:

  • 谢谢。这帮助很大。
猜你喜欢
  • 1970-01-01
  • 2017-05-19
  • 2019-01-27
  • 2012-02-25
  • 2018-08-10
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多