mongodb - 在 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和其他 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 - Mongoose - 验证电子邮件语法

node.js - MongoDB - 错误 : invalid schema, 预期 mongod

mongodb - 如何查询 MongoDB 以测试项目是否存在?

mongodb - 用于 maxdistance 和 MongoDB 的单位?

mongodb - 在 Meteor 中运行示例的问题