2016-12-21 7 views
0

余分な低速HFTエンジンの作成に興味があり、Mongoを使用しているとします。ここでMongoのサブ文書/リストのサブ文書を照会

は、毎日の外国為替オブジェクトの束を表す、JSONです:

{ 
    date: 2016-12-21, 
    relation: { 
     {currency: USD, value: 1.0}, 
     {currency: EUR, value: 0.9}, 
    } 
}, 
{ 
    date: 2016-12-21, 
    relation: { 
     {currency: USD, value: 0.9}, 
     {currency: FJD, value: 1.0}, 
    } 
}, 

私はどこのすべての日々の外国為替オブジェクトを取得したい:

  • 日= 2016年12月21日
  • forexオブジェクトは、その関係リストの少なくとも1つの位置のFJD通貨を表します。

どうやって?

答えて

1

は、以下のことを試してみてください。

db.collection.find({ 
    "$or" : [ 
    { 
     "date" : "2016-12-21", 
     "relation.0.currency" : "JSD" 
    }, 
    { 
     "date" : "2016-12-21", 
     "relation.1.currency" : "JSD" 
    } 
    ] 
}) 

注例ドキュメントが有効なJSONではなかったので、上記のクエリは文字列としてすべての値と一致していること。また、「関係」は配列ではなく埋め込みドキュメントであると仮定しました。 "0"と "1"は文字列フィールド名であり、配列位置ではありません。

あなたの「関係」は、以下のように埋め込まれた文書の配列として構造化された場合:

{ 
    date: "2016-12-21", 
    relation: [ 
     { currency: "USD", value: 1.0}, 
     { currency: "EUR", value: 0.9}, 
    ] 
} 

、クエリは次のようになります。

db.collection.find({ 
    "date" : "2016-12-21", 
    "relation.currency" : "JSD" 
}) 

は、より多くの情報のためArray of Embedded Documentsを参照してください。

+0

ありがとうございます。私が走っている問題はpymongoです。私の質問で与えられた例に、Python辞書のリストを出力します(ここでは分かりやすく編集しています)。 robomongoと一緒に使うと、リストは[0] [1]で表され、これは真実ではありませんでした。私はあなたの2番目の例がうまくいくと思います。 – mh00h

関連する問題