是否可以重命名查找查询中返回的字段名称?我想使用类似 $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
和其他 aggregation framework operators了解更多详情。
在大多数情况下,您应该在处理光标时简单地将字段重命名为从 .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 })
)
这避免了服务器上的任何额外开销,并且应该在额外处理开销超过实际减少检索数据大小的 yield 的情况下使用。在这种情况下(和大多数情况下),它将是最小的,因此重新处理游标结果以进行重组会更好。
https://stackoverflow.com/questions/23784370/
相关文章:
mongodb - 升级mongodb没有效果仍然显示旧版本
python - 在 Flask 中将表单 POST 对象转换为适合 mongodb 的表示形式
node.js - Nodejs 中的 Mongodb 与 Postgres
mongodb - 无法在提供的主机和端口上连接到 MongoDB
mongodb - 如何在 mongodb 配置文件中设置授权?
node.js - MongoDB - 错误 : invalid schema, 预期 mongod
mongodb - 如何查询 MongoDB 以测试项目是否存在?