2016-12-21 135 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日
  • 的外匯對象在其關係列表的至少一個位置描述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]表示,這不是真的。我認爲你的第二個例子會起作用。 – mh00h