首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在MongoDB中执行搜索/投影时如何重命名字段?

在MongoDB中执行搜索/投影时如何重命名字段?
EN

Stack Overflow用户
提问于 2014-05-21 21:18:00
回答 2查看 54.1K关注 0票数 56

是否可以重命名在查找查询中返回的字段的名称?我想使用像$rename这样的东西,但是我不想更改我正在访问的文档。我只想以不同的方式检索它们,就像SQL中的SELECT COORINATES AS COORDS一样。

我现在要做的是:

代码语言:javascript
复制
db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0})
{'level1': {'level2': {'coordinates': [10, 20]}}}

我希望返回的是:{'coords': [10, 20]}

EN

回答 2

Stack Overflow用户

发布于 2019-06-10 00:22:12

正如@Neil Lunn所提到的,这可以通过聚合管道来实现:

Mongo 4.2开始,可以使用$replaceWith聚合运算符将子文档替换为文档:

代码语言:javascript
复制
// { level1: { level2: { coordinates: [10, 20] }, b: 4 }, a: 3 }
db.collection.aggregate(
  { $replaceWith: { coords: "$level1.level2.coordinates" } }
)
// { "coords" : [ 10, 20 ] }

由于您提到了findOne,因此您还可以将结果文档的数量限制为1:

代码语言:javascript
复制
db.collection.aggregate([
  { $replaceWith: { coords: "$level1.level2.coordinates" } },
  { $limit: 1 }
])

Mongo 4.2和启动Mongo 3.4之前,可以使用$replaceRoot代替$replaceWith

代码语言:javascript
复制
db.collection.aggregate(
  { $replaceRoot: { newRoot: { coords: "$level1.level2.coordinates" } } }
)
票数 6
EN

Stack Overflow用户

发布于 2020-02-04 17:49:09

正如我们所知道的,通常,$project阶段采用字段名称并指定1或0/true或false以在输出中包含字段,我们还可以针对字段指定值而不是true或false来重命名字段。以下是语法

代码语言:javascript
复制
    db.test_collection.aggregate([
        {$group: {
            _id: '$field_to_group',
            totalCount: {$sum: 1}
        }},
        {$project: {
            _id: false,
            renamed_field: '$_id',    // here assigning a value instead of 0 or 1 / true or false effectively renames the field.
            totalCount: true
        }}
    ])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23784370

复制
相关文章

相似问题

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