質問: MongoDBの代わりに$が存在する 私は100000のドキュメントを持っており、最高の値を持つ上位10のドキュメントを取得する必要があります。 単純化されたドキュメントの例を次に示します。 ``` { "_id" : ObjectId( "4f2fbeb0369a2ba603000000" ), "usage" : { "2012" : { "2" : { "project" : { "4f182a76369a2b2903000000" : { "site" : { "1" : 5, "2" : 1 } } } } } } } ``` ソート/リミットが適用される値は、 'usage.2012.2.project.4f182a76369a2b2903000000.site.1'にあります(上記の例の場合、値は5です)。 問題は、いくつかの文書ではこのオブジェクトが存在し、他のオブジェクトでは存在しないということです。 $ existsを使ってオブジェクトが存在するかどうかを調べることができますが、$ existsを使っているMongoDBのマニュアルによれば、非効率的です。私がこれを行うことについて行くことができる別の方法がありますか?必要に応じてスキーマを変更することができます..
回答: 特定の文書に存在しない値に基づいて照会すると、その値を含まない文書は結果セットから除外されます。あらかじめ$ existsを使ってフィルタリングする必要はありません。 ``` db.collection.find().sort( { "usage.2012.2.project.4f182a76369a2b2903000000.site.1" : -1 } ).limit(10) ``` 上記のクエリでは、最大10個の値しか返されません。ソートフィールドが存在しないドキュメントは考慮されません。