我有架构
{ summaries:
[
{
type: 'temp',
min: 10,
max: 40
},
{
type: 'humidity',
min: 3,
max: 40
}
],
thresholds: [
{
type: 'temp',
low: -10,
high: 40
},
{
type: 'humidity',
low: 9,
high: 30
}
]
}
此目的以上是在采集一个记录。 我想记录,如果summaries.type == '临时' 和thresholds.type == '临时' 和summaries.min> thresholds.low
摘要对象与阈值比较的对象必须是相同的类型。 temp与temp比较,hum与hum比较。具有任何摘要对象温度,且最小值<任何阈值对象温度将被返回
示例:
{ summaries:
[
{
type: 'temp',
min: 10,
max: 40
},
{
type: 'humidity',
min: 3,
max: 40
}
],
thresholds: [
{
type: 'temp',
low: -10,
high: 40
},
{
type: 'humidity',
low: 9,
high: 30
}
]
}
将返回temp min = 10,阈值下限= -10。
{ summaries:
[
{
type: 'temp',
min: 10,
max: 40
},
{
type: 'humidity',
min: 3,
max: 40
}
],
thresholds: [
{
type: 'temp',
low: 20,
high: 40
},
{
type: 'humidity',
low: 9,
high: 30
}
]
}
将不会返回,因为temp min = 10,阈值temp low = 20,尽管阈值hum low = 9
答案 0 :(得分:1)
您可以通过$expr
db.collection.find({
"$expr": {
"$gt": [
{
"$arrayElemAt": [
"$summaries.min",
{ "$indexOfArray": ["$summaries.type", "temp"] }
]
},
{
"$arrayElemAt": [
"$thresholds.low",
{ "$indexOfArray": ["$thresholds.type", "temp"] }
]
}
]
}
})