在 MongoDB 中将数组中的字段 ($project) 重命名

8

我有一个类似以下的文档:

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

我正在使用投影将字段 "_id" 重命名为 "id" ,将 "sectionName" 重命名为 "name",这是使用查询实现的。
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"}
    ]
};

但它似乎不起作用,我做错了什么?

请注意,我不是像这个问题中那样尝试更新此文档,我想以所需格式投影文档。


我认为你只是语法写错了。尝试使用"$sections._id":"sections.id" - ZombieChowder
期望的输出是什么? - felipsmartins
@felipsmartins 把 _.id 字段改成 .id,我猜。 - ZombieChowder
以下是所需的输出{ "_id" : "59ba903dacea50d0d7d47168", "sections" : [ { "id" : "59d9dd7947ce651544c5d4c1", "name" : "第一部分" }, { "id" : "59d9dd8147ce651544c5d4c2", "name" : "第二部分" }, { "id" : "59d9dd9747ce651544c5d4c3", "name" : "第三部分" } ] } - Saha K P Ghoshal
@SahaKPGhoshal 好的,我已经回答了你的问题,请查看;) - felipsmartins
显示剩余2条评论
1个回答

14

如果我理解正确的话,应该通过 $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
}

1
谢谢。这非常有帮助。 - Visakh Vijayan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接