Object内の子配列、つまり親配列内の単一のMongoDBドキュメントから最大値を抽出しようとしています。
子配列は親配列data
内に含まれていると呼ばれ、同じ値の残りの部分と比較したときにlist
、最も高いものを抽出しようnumber
としています。
とりわけ$Group
and $max
(以下の例)を使用してみましたが、あまり成功していません。-すべての数値を含む配列が返されます:[2,3]
list
配列とdata
配列を検索して最高値を返すにはどうすればよいnumber
ですか?
以下の例で期待される出力: {output: 3}
MongoPlaygroundの例:https://mongoplayground.net/p/qw9Kz_WVYiS
MongoDBのセットアップとドキュメント
db={
"groups": [
{
"_id": ObjectId("602ed22af42c404096407dda"),
"groupName": "Name"
}
],
"inventory": [
{
"_id": ObjectId("602ed22af42c404096407ddc"),
"linkedGroup": ObjectId("602ed22af42c404096407dda"),
"list": [
{
"_id": ObjectId("602eeb0621a11045638b7082"),
"data": {
"number": 2
},
},
{
"_id": ObjectId("602eec75c37147459ed7b12c"),
"data": {
"number": 3
}
}
]
}
]
}
クエリ
db.groups.aggregate([
{
"$lookup": {
"from": "inventory",
"localField": "_id",
"foreignField": "linkedGroup",
"as": "inventory_links"
}
},
{
$group: {
_id: 1,
output: {
$max: "$inventory_links.list.data.number"
},
},
}
])
$reduce
最大値を見つけるために。クエリを使用して、他のステージを追加できます。
{
$addFields: {
_id: 1,
inventory_links: {"$arrayElemAt": ["$inventory_links",0]}
}
},
{
$project: {
output: {
$reduce: {
input: "$inventory_links.list",
initialValue: 0,
in: {
$cond: [
{$gte: [ "$$this.data.number","$$value"]},
"$$this.data.number",
"$$value"
]
}
}
}
}
}
働くモンゴの遊び場
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加