我有一个带有字段"磁盘"的文档。就这样:
"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,因此它应该返回所有内容仅用于测试,但它什么也没有返回。
这个的正确语法是什么?
答案 0 :(得分:0)
您必须在$filter
表达式中使用$expr
运算符。您不能在$ expr中使用查询运算符($elemMatch
)。 $expr
仅允许聚合运算符。
外$gt
来检查匹配记录的$size
何时大于0
像
这样的东西db.servers.find(
{"$expr":{
"$gt":[
{"$size":{
"$filter":{
"input":"$disk",
"as":"item",
"cond":{
"$gt":[
{"$divide":["$$item.used","$$item.capacity"]},
0.9
]
}
}
}},
0
]
}})