2016-06-01 23 views
0

私は以下のようなロケーションテーブルを持っています。私はその特定の場所の評価が3以上のドライバーだけの詳細を取得する必要があります。事前にMongoDB - 辞書で辞書の配列を検索するには

おかげで...

[ 
    { 
     "name":"Delhi", 
     "cab_details(sub table)":[ 
      { 
       "driver_details"(join):{ 
        "name":"1111", 
        "ratings_above_three":true 

       }, 
       "date_joining": date 
      }, 
      { 
       "driver_details":{ 
        "name":"2222", 
        "ratings_above_three":false 
       }, 
       "date_joining": date 
      }     
     ] 
    }  
] 
+0

試しましたか?db.collection.find({'cab_details.driver_details.ratings_above_three':true}) – rkatkam

答えて

0

あなたが別のcollectionにあなたのdriversを置く場合、それははるかに容易になるだろう。 MongoDBは非常によく成長するオブジェクトを扱いません。

スキーマ設計のフォローthe principle of least cardinality

は、この質問を参照してください:mongodb-performance-with-growing-data-structure

私はあなたが提示したモデルは、コレクションcitiesからCityである疑いがあります。ですから、cab_driversという名前の別のコレクションを作成し、それにCabDriverドキュメントを埋め込むことをお勧めします。あなたはObjectIdのを使ってそれらの間の関係を維持することができます。 CityCabDriver._idの値の配列をcab_driversとして格納すると、照会、検証、更新がはるかに簡単になります。また、City文書内のcab_drivers配列は、親内に文書全体を保持する場合よりもはるかに遅くなります。

mongooseを使用すると、city.populate('cab_drivers')を使用してアプリケーションレベルですべての関連ドキュメントを読み込むことができます。