查询Mongo中子文档/列表的子文档

时间:2016-12-21 23:25:26

标签: mongodb pymongo

假设我们有兴趣编写一个额外的慢速HFT引擎并使用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},
    }
},

我想获取所有日常外汇对象:

  • date = 2016-12-21
  • 外汇对象在其关系列表
  • 的至少一个位置描述FJD货币

如何?

1 个答案:

答案 0 :(得分: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