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

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

我现在应该做什么:

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"
    }}
])

这会给你你想要的结果。

MongoDB 2.6 及更高版本返回一个“光标”,就像 find 一样。

有关详细信息,请参阅$project和其他聚合框架运算符。


在大多数情况下,您应该在处理游标时简单地重命名从.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 })
)

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

Logo

MongoDB社区为您提供最前沿的新闻资讯和知识内容

更多推荐