したがって、基本的には .aggregate()
を使用します .find()
の代わりに :
db.tweets.aggregate([
{ "$project": {
"_id": 0,
"coords": "$level1.level2.coordinates"
}}
])
そして、それはあなたが望む結果をあなたに与えます。
MongoDB 2.6以降のバージョンは、findと同じように「カーソル」を返します。
$project
を参照してください 詳細については、その他の集約フレームワーク演算子を参照してください。
ほとんどの場合、.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 })
)
これにより、サーバーでの追加のオーバーヘッドが回避され、追加の処理オーバーヘッドが、取得されるデータのサイズを実際に削減することのメリットを上回る場合に使用する必要があります。この場合(およびほとんどの場合)、最小限であるため、カーソルの結果を再処理して再構築することをお勧めします。