您可以使用 $switch 聚合框架运算符。
https://docs.mongodb.com/manual/reference/operator/aggregation/switch/#example
这里是根据您的要求的示例
示例文档
每个案例一个文档
{
"name" : "sensor1",
"measure" : "C",
"value" : 36
}
{
"name" : "sensor2",
"measure" : "F",
"value" : 78
}
{
"name" : "sensor3",
"measure" : "C",
"value" : 12
}
{
"name" : "sensor4",
"measure" : "F",
"value" : 113
}
查询
使用不同的案例,您可以根据度量和值涵盖所有场景。
- 华氏公式设置在 case 运算符中。
- 如果需要,添加排序运算符和其他匹配条件。
-
$skip 和 $limit 可以使用代码动态设置
db.test.aggregate(
[{$project : {
"name" : 1,
"measure": 1,
"value": 1,
"result" :
{ $switch:
{
branches: [
{
//when your Celsius temp is greater and equals to 36
case: { $and : [ { $eq : [ "$measure" , "C" ] },
{ $gte : [ "$value" , 36 ] } ] },
then: true
},
{
//when your Celsius temp is less then 36
case: { $and : [ { $eq : [ "$measure" , "C" ] },
{ $lt : [ "$value" , 36 ] } ] },
then: false
},
{
//when your Fahrenheit temp is greater and equals to 36
case: { $and : [ { $eq : [ "$measure" , "F" ] },
{ $gte : [ {"$multiply" : [ { "$sum":
["$value", -32]}, 5/9]} , 36 ] } ] },
},
then: true
},
{
//when your Fahrenheit temp is less than 36
case: { $and : [ { $eq : [ "$measure" , "F" ] },
{ $lt : [ {"$multiply" : [ { "$sum":
["$value", -32]}, 5/9]} , 36 ] } ] }, ] },
then: false
}
],
default: "error"
}
}}},
{$skip : 0},
{$limit : 2}])
结果
{
"name" : "sensor1",
"measure" : "C",
"value" : 36,
"result" : true
}
{
"name" : "sensor2",
"measure" : "F",
"value" : 78,
"result" : false
}