Mongo查询,相交两个范围

时间:2017-11-14 16:49:37

标签: mongodb mongodb-query aggregation-framework

我该如何优化它?我的意思是即使不是表演,也不是可读性......

它是聚合管道的一个阶段。 我必须在对象中匹配搜索标准列表。

500 - "来自"来自对象的属性 - >静态

1000 - " to"来自对象的属性 - >静态

我必须找到与对象相交的所有组。 此外,用户可以定义"<&#;"">"以及"< =","> ="。

它并不总是一个范围,一个比较运算符可能会丢失,所以它必须搜索+ - 无穷大。

提前致谢!

{
  "$and": [
    {
      "$or": [
        {
          "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">=" }, "attributes.value": { "$lte": 500 }
        },
        {
          "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">" }, "attributes.value": { "$lt": 500 }
        },
        {
          "$and": [
            { "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">=" }, "attributes.value": { "$gte": 500 } },
            { "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">=" }, "attributes.value": { "$lte": 1000 } }
          ]
        },
        {
          "$and": [
            { "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">" }, "attributes.value": { "$gt": 500 } },
            { "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">" }, "attributes.value": { "$lt": 1000 } }
          ]
        },
        {
          "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$nin": [">=", ">"] }
        }
      ]
    },
    {
      "$or": [
        {
          "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": "<=" }, "attributes.value": { "$gte": 1000 }
        },
        {
          "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": "<" }, "attributes.value": { "$gt": 1000 }
        },
        {
          "$and": [
            { "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">=" }, "attributes.value": { "$lte": 1000 } },
            { "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">=" }, "attributes.value": { "$gte": 500 } }
          ]
        },
        {
          "$and": [
            { "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">" }, "attributes.value": { "$lt": 1000 } },
            { "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$eq": ">" }, "attributes.value": { "$gt": 500 } }
          ]
        },
        {
          "attributes.key": { "$eq": "SIZE" }, "attributes.operator": { "$nin": ["<=", "<"] }
        }
      ]
    }
  ]
}

0 个答案:

没有答案