首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$project聚合管道上的重命名字段

$project聚合管道上的重命名字段
EN

Stack Overflow用户
提问于 2018-10-31 20:20:18
回答 1查看 597关注 0票数 0

我需要从数组中重命名一个文档字段。这是我的文件:

代码语言:javascript
复制
"_id" : ObjectId("5bda09a090ecff10f7275781"),
"color" : "blue",
"levels" : [
    {
        "level" : 1,
        "tag" : "AB"
    },
    {
        "level" : 2,
        "tag" : "AA"
    },
    {
        "level" : 3,
        "tag" : "BB"
    }
]

我需要在我的平台上将子文档字段重命名为indice,但是我没有成功。

这是我的聚合函数和不想要的结果:

代码语言:javascript
复制
db.test.aggregate({$project: {color:1, 'levels.tag':1, 'levels.indice': '$levels.level'}}).pretty()

不必要的结果:

代码语言:javascript
复制
"_id" : ObjectId("5bda09a090ecff10f7275781"),
"color" : "blue",
"levels" : [
    {
        "tag" : "AB",
        "indice" : [
            1,
            2,
            3
        ]
    },
    {
        "tag" : "AA",
        "indice" : [
            1,
            2,
            3
        ]
    },
    {
        "tag" : "BB",
        "indice" : [
            1,
            2,
            3
        ]
    }
]

我只希望有以下结果:

代码语言:javascript
复制
"_id" : ObjectId("5bda09a090ecff10f7275781"),
"color" : "blue",
"levels" : [
    {
        "indice" : 1,
        "tag" : "AB"
    },
    {
        "indice" : 2,
        "tag" : "AA"
    },
    {
        "indice" : 3,
        "tag" : "BB"
    }
]

有谁可以帮我?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-31 20:26:34

使用$map迭代级别并重命名字段。保留所有现有字段的$addFields

代码语言:javascript
复制
db.test.aggregate({
  "$addFields":{
    "levels":{
      "$map":{
        "input":"$levels",
        "in":{
          "indice":"$$this.level",
          "tag":"$$this.tag"
        }
      }
    }
  }
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53091363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档