pyMongo 嵌套分割,gt



我有一个字段"disk"的文档:

"host": "localhost"
"disk":[
                {
                    "dir": "/var",
                    "capacity": 6291456,
                    "used": 291456
                },
                {
                    "dir": "/tmp",
                    "capacity": 6291456,
                    "used": 1365386
                }
            ]

我正在尝试编写一个查询来选择使用百分比大于 90% 的服务器。我需要嵌套 gt 和划分函数,但我无法让它工作。

本质上,它需要:

for item in disk:
    if used/capacity > .9:
        return document

我试过:

db.servers.find({ 'disk': { '$elemMatch' : { '$expr': { '$gt' : [{'$divide': {'used': 'capacity'}}, 0]  } } } }) 

将 gt 值设置为 0 时,它应该返回所有内容仅用于测试,但它不返回任何内容。

正确的语法是什么?

您必须

$expr表达式中使用$filter运算符。不能在$expr中使用查询运算符 ($elemMatch(。 $expr仅允许聚合运算符。

当匹配记录的$size大于 0 时要检查的外部$gt

类似的东西

db.servers.find(
{"$expr":{
  "$gt":[
    {"$size":{
      "$filter":{
        "input":"$disk",
        "as":"item",
        "cond":{
          "$gt":[
            {"$divide":["$$item.used","$$item.capacity"]},
            0.9
          ]
        }
      }
    }},
    0
  ]
}})

相关内容

  • 没有找到相关文章