mongodb查询具有未知属性的第三级

时间:2018-07-19 14:01:47

标签: mongodb mongodb-query aggregation-framework

我需要在mongodb中执行查询。文档存储如下

    {
        "_id": "5b506440a7769100817265b2",
        "zones": [
            "London",
            "Berlin",
            "Rome"
        ],
        "width": 100,
        "price_list_id": 2,
        "heights": {
            "200": {
                "window_fixed_arch_low": {
                    "default": false,
                    "price": "2"
                }
            },
            "300":{
                "window_fixed_arch_regular": {
                    "default": false,
                    "price": "3"
                }
            }
        }
    }

我只想检索具有heights.*.window_fixed_arch_regular属性的所有文档。我尝试过

({'heights.$.window_fixed_arch_regular', 'exists', true})

但没有运气。

不指定所有高度(在我的情况下为200和300)“搜索”并检查是否存在“ window_fixed_arch_low”的查询是什么?

1 个答案:

答案 0 :(得分:1)

您可以在3.6中使用以下查询。

$objectToArrayheights文档转换为键值对,然后转换$filter将输入值与文档中的值进行比较。

$expr在查找查询中接受聚合表达式。

$gt > null-聚合表达式,用于检查匹配值的位置,然后是$size,以输出计数。

$gt > 0-用于检查计数大于0的聚合表达式。

db.collectionName.find({
  "$expr":{
    "$gt":[
      {"$size":{
        "$filter":{
          "input":{"$objectToArray":"$heights"},
          "cond":{"$gt":["$$this.v.window_fixed_arch_low",null]}
        }
      }},
      0
    ]
  }
})