下面是一个非常简单的数据示例:
[
{
"data": [
{
"uid": "0",
"value": 0,
},
{
"uid": "1",
"value": 1,
},
{
"uid": "2",
"value": 2,
}
]
}
]
然后,我想找到uid
最大的对应值value
。就我而言,结果应为"2"
。
这是我正在使用的查询:
db.collection.aggregate([
{
"$project": {
"_id": 0,
"value_argmax": {
"$arrayElemAt": [
"$data.uid",
{
"$indexOfArray": [
"$data.value",
{
"$max": "$data.value"
}
]
}
]
}
}
}
])
该代码适用于我的情况。但是,如果存在某些缺少的字段,查询代码可能会失败。例如,如果我有一个数据示例,如下所示:
[
{
"data": [
{
"uid": "0",
// "value": 0, // missing field
},
{
"uid": "1",
"value": 1,
},
{
"uid": "2",
"value": 2,
}
]
}
]
查询的结果将是“ 1”而不是“ 2”(在我的情况下,我只想省略缺少的字段)。
那么,我该怎么做才能解决查询问题?这是简单的测试用例:https : //mongoplayground.net/p/8qiFRB8EsSE
提前致谢!
试试这个:
db.collection.aggregate([
{
$set: {
data: {
$filter: {
input: "$data",
cond: { $eq: [{ $max: "$data.value" }, "$$this.value"] }
}
}
}
},
{ $set: { value_argmax: { $first: "$data.uid" } } },
{ $unset: "data" }
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句