是否可以重命名查找查询中返回的字段的名称?我想使用$rename
左右,但我不想更改我正在访问的文档.我只想以不同的方式检索它们,类似于SQL中的SELECT COORINATES AS COORDS
.
我现在做的是:
db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0})
{'level1': {'level2': {'coordinates': [10, 20]}}}
我希望得到的回报是:
是否可以重命名查找查询中返回的字段的名称?我想使用$rename
左右,但我不想更改我正在访问的文档.我只想以不同的方式检索它们,类似于SQL中的SELECT COORINATES AS COORDS
.
我现在做的是:
db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0})
{'level1': {'level2': {'coordinates': [10, 20]}}}
我希望得到的回报是:
所以基本上用.aggregate()
而不是.find()
:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
这会给你想要的结果.
MongoDB 2.6及以上版本与find一样返回"游标".
有关更多详细信息,请参见$project
和其他aggregation framework operators.
在大多数情况下,处理光标时,只需将字段重命名为.find()
返回的字段.以JavaScript为例,可以使用.map()
来实现这一点.
从shell 上看:
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 })
)
这避免了服务器上的任何额外开销,并且应该在额外的处理开销将超过检索到的数据大小实际减少的yield 的情况下使用.在这种情况下(以及大多数情况下),重新处理光标结果以进行重组将是最小的,因此更好.