所以基本上使用.aggregate() http://docs.mongodb.org/manual/reference/method/db.collection.aggregate/代替.find() http://docs.mongodb.org/manual/reference/method/db.collection.find/:
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
这会给你你想要的结果。
MongoDB 2.6 及以上版本返回一个“光标”,就像 find 一样。
See $project http://docs.mongodb.org/manual/reference/operator/aggregation/project/和别的聚合框架运算符 http://docs.mongodb.org/manual/reference/operator/aggregation/更多细节。
对于大多数情况,您应该简单地重命名从返回的字段.find()
处理光标时。以 JavaScript 为例,您可以使用.map() https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/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 })
)
这避免了服务器上的任何额外开销,并且应该在额外处理开销超过实际减少检索数据大小的收益的情况下使用。在这种情况下(以及大多数情况下),它会是最小的,因此最好重新处理游标结果以进行重组。