2012-01-23 14 views
0

MongoDBからいくつかのデータを取得しようとしていますが、それを効率的に行う方法がわかりません。私のコレクション/文書構造は理想的ではないかもしれませんし、私は別の方法でそれを保存する必要があります。何かアドバイスは、私は2つのコレクション持っている..MongoDB - このデータを照会する方法

をいただければ幸いです - オブジェクトをビュー

オブジェクト

{ 
    "_id" : ObjectId("4f182ac3369a2b2603010000"), 
    "name" : "Object name", 
    "project_id" : "4f182a76369a2b2903000000" 
} 

オブジェクトビュー

{ 
"_id" : ObjectId("4f182ac3369a2b2603010000"), 
    "2012" : { 
    "r" : 8, 
    "t" : 16, 
    "u" : 10, 
    } 
} 

私がしたいオブジェクト'Obから2012.rを取得する特定のプロジェクトに属するすべてのオブジェクトのビューのコレクションを取得します。

  1. は_idフィールドに一致する「オブジェクト ビュー」コレクションからすべてのドキュメントを返す検索クエリを持っている:

    は、ここでそれを行う方法の私の考えです。私にとってこれは のようには効率的ではなく、整然としたやり方ではありません(2000年には のオブジェクトがあったとします)。

  2. すべての 'オブジェクトビュー'ドキュメントにproject_idフィールドを追加し、次にfind_queryを実行してproject_idに一致するすべてのドキュメントを選択します。複数の文書を選択することは効率的であるか(2倍か2000倍か)
  3. この問題専用のコレクションを作成します。各プロジェクトには、そのプロジェクトに属するオブジェクトのすべてのインスタンスと2012年の値を指定するドキュメントが含まれています。次に、検索クエリを実行して単一のドキュメントを選択します。

いずれの考え/アドバイスや代替ソリューションもありがとうございます。

答えて

1

PROJECT_IDに一致するすべての文書を選択するには の検索クエリを実行し、その後、すべての文書の見解オブジェクトのをにPROJECT_IDフィールドを追加します。 は、複数の文書を選択する際に悩んでいます( は2または2000ほどあります)。確かに

それを行う方法(プラスその列のインデックス)、両方のパフォーマンス(db.object_views.find({project_id : "4f182a76369a2b2903000000" }))とコード&クエリ簡素化の観点インチ

ドライバはフードの下でバッチ処理を行うため、2000件のドキュメントを取得するのは大したことではありません。あなたはSQLでの強力なバックグラウンドを持っている場合は

+0

お気軽にお問い合わせください。あなたが言うように、それにインデックスがあると仮定すると、projectIidをObjectIdまたは文字列として格納することをお勧めしますか? – RichW

+1

私はObject.project_idと同じ型を使います – milan

0

、あなたはthis SQL-MongoDBのトランスレータ役に立つかもしれません。それが必要とされるとき

はしかし、それはパラメータに引用符をミス。それで、それを見てください。

ご希望の場合は、

関連する問題