我想达到的目标是:
let validations = [
{
"label": "kpis.avgLatency",
"program":"ping-test",
"multiple":false,
"conditions" :[
{
"operator" : "$gt",
"value": NumberInt(-107)
},
{
"operator" : "$lt",
"value": NumberInt(0)
}
]
}
]
validations.map((item) => {
let test = db.task.aggregate([
{$addFields: {validation: item}},
{$match: { program: item.program}},
{$project:{
validation2: {
$map: {
input: item.conditions,
as: "val",
in: { $cond:{ if: { $lt: ['$validation.label', '$$val.value'] } , then: true, else: false} }
}}
}}
,
]).toArray();
print(test);
})
字符串
这和预期的一样,但是我需要做的是,而不是$lt
运算符,使用我的items.condition
的运算符,类似于这样:
in: { $cond:{ if: { '$$val.operator': ['$validation.label', '$$val.value'] } , then: true, else: false} }
型
这正是我所尝试的,但不起作用。有什么办法可以做到吗?
使用vars作为值很容易,但我不知道如何将其用作运算符。
1条答案
按热度按时间ut6juiuv1#
我不熟悉这样的选项,但是您可以通过使用分支来绕过它(因为相关操作符的数量有限)。这不是最优雅的做事方式。
字符串
了解它在playground example上的工作原理