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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (6)

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

我现在做的是:

db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0})
{'level1': {'level2': {'coordinates': [10, 20]}}}

我想要的是:{'coords': [10, 20]}

提问于
用户回答回答于

所以基本上使用.aggregate()而不是.find():

db.tweets.aggregate([
    { "$project": {
        "_id": 0,
        "coords": "$level1.level2.coordinates"
    }}
])

这给了你你想要的结果。

MongoDB2.6和更高版本返回一个“游标”,就像find一样。

在大多数情况下,只需将字段重命名为.find()当处理光标时。以JavaScript为例,可以使用.map()做这件事。

从外壳:

db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => {
  doc.coords = doc['level1']['level2'].coordinates;
  delete doc['level1'];
  return doc;
})

或更多的内联:

db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map( doc => 
  ({ coords: doc['level1']['level2'].coordinates })
)

这避免了服务器上的任何额外开销,并且应该在这样的情况下使用,在这种情况下,额外的处理开销将超过实际减少检索的数据大小的增益。在这种情况下(也是大多数),重新处理游标结果以进行重构将是最小的,因此更好。

扫码关注云+社区