是否可以重命名查找查询中返回的字段的名称?我想使用$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 的情况下使用.在这种情况下(以及大多数情况下),重新处理光标结果以进行重组将是最小的,因此更好.

Mongodb相关问答推荐

数组相等条件返回的文档多于与相等匹配的文档:MongoDB

带dropTarget的MongoDB renameCollection命令是原子的吗

DTO 验证适用于 POST,但不适用于 PUT

如何 db.getUser() 使用 go mongo-driver

DB 中的引用对象在 GraphQL 查询中返回 null

将子文档中的所有字段设置为 false,然后在单个查询中将第二个字段设置为 true

用 BsonRepresentation(BsonType.ObjectId) vs BsonId vs ObjectId 在 C# 中装饰属性之间的区别

在 Nodejs 中找不到模块

Mongoose 和新架构:返回ReferenceError: Schema is not defined

从 mongodb 中的副本配置重新开始

字段类型在 MongoDB 索引中是否重要?

MongoDB:多个 $elemMatch

如何在mongoose中加入两个集合

Cannot connect to MongoDB errno:61

带有 Java 驱动程序的 MongoDB 聚合

我们如何使用spring boot为mongodb创建自动生成的字段

Mongodb同时在多个字段上聚合(计数)

MongoDB 引用的最佳实践

Mongo 条件为key doesn't exist?

MongoDB - $set 更新或推送数组元素