mongodb:如何使用变量作为运算符

bxgwgixi  于 2023-08-04  发布在  Go
关注(0)|答案(1)|浏览(104)

我想达到的目标是:

  1. let validations = [
  2.     {
  3.         "label": "kpis.avgLatency",
  4.         "program":"ping-test",
  5.         "multiple":false,
  6.         "conditions" :[
  7.             {
  8.                 "operator" : "$gt",
  9.                 "value": NumberInt(-107)
  10.             },
  11.             {
  12.                 "operator" : "$lt",
  13.                 "value": NumberInt(0)
  14.             }
  15.         ]
  16.     }
  17. ]
  18. validations.map((item) => {
  19. let test = db.task.aggregate([
  20.     {$addFields: {validation: item}},
  21.     {$match: { program: item.program}},
  22.     {$project:{
  23.       validation2: {
  24.         $map: {
  25.           input: item.conditions,
  26.             as: "val",
  27.             in: { $cond:{ if: { $lt: ['$validation.label', '$$val.value'] } , then: true, else: false} }
  28.         }}
  29.     }}
  30.     ,
  31.     ]).toArray();
  32.     print(test);
  33. })

字符串
这和预期的一样,但是我需要做的是,而不是$lt运算符,使用我的items.condition的运算符,类似于这样:

  1. in: { $cond:{ if: { '$$val.operator': ['$validation.label', '$$val.value'] } , then: true, else: false} }


这正是我所尝试的,但不起作用。有什么办法可以做到吗?
使用vars作为值很容易,但我不知道如何将其用作运算符。

ut6juiuv

ut6juiuv1#

我不熟悉这样的选项,但是您可以通过使用分支来绕过它(因为相关操作符的数量有限)。这不是最优雅的做事方式。

  1. db.collection.aggregate([
  2. {$addFields: {validation: {label: 7}}},
  3. {$project: {
  4. validation2: {
  5. $map: {
  6. input: "$conditions",
  7. as: "val",
  8. in: {$switch: {
  9. branches: [
  10. {
  11. case: {$eq: ["$val.operator", "$gt"]},
  12. then: {$cond: {
  13. if: {$gt: ["$validation.label", "$$val.value"]},
  14. then: true,
  15. else: false
  16. }}
  17. },
  18. {
  19. case: {$eq: ["$val.operator", "$lt"]},
  20. then: {$cond: {
  21. if: {$lt: ["$validation.label", "$$val.value"]},
  22. then: true,
  23. else: false
  24. }}
  25. },
  26. //...
  27. ]
  28. }}
  29. }
  30. }
  31. }}
  32. ])

字符串
了解它在playground example上的工作原理

展开查看全部

相关问题