gpt4 book ai didi

javascript - 如何在 MongoDB 中对 $group 中的推送数据进行排序和限制

转载 作者:可可西里 更新时间:2023-11-01 10:48:42 26 4
gpt4 key购买 nike

<分区>

也许有人知道..我的 mongoDB 集合中的每个文档如下所示:

[
_id: 1,
login: user1,
strength: {
a: 5,
b: 2
},
group: 2
]

如何找出每组中strength.a和strength.b之和最大的前10篇文档?

例子:我有这样的文件:

[ login: login1, group: 2, strength: { a: 2, b: 5 } ]

[ login: login2, group: 1, strength: { a: 1, b: 2 } ]

[ login: login3, group: 3, strength: { a: 1, b: 4 } ]

[ login: login5, group: 1, strength: { a: 1, b: 1 } ]

[ login: login6, group: 1, strength: { a: 10, b: 4 } ]

[ login: login7, group: 3, strength: { a: 0, b: 2 } ]

[ login: login8, group: 3, strength: { a: 11, b: 4 } ]

我要得到结果:

[ group: 1, users: [ { login: login6, sumOfStrength: 14 }, { login: login2, sumOfStrength: 3 } ] ]

[ group: 2, users: [ { login: login1, sumOfStrength: 7 } ] ]

[ group: 3, users: [ { login: login8, sumOfStrength: 15 }, { login: login3, sumOfStrength: 5 } ] ]

总而言之,在这个例子中,我想得到按“组”字段分组的结果,并且只从每个组中选择“a”和“b”字段总数最大的前两个文档。这可行吗?

到目前为止,我做到了:

db.collection('myCollection').aggregate( 
[
{ $group: { _id: '$group', users: { $push: { login: '$login', sumOfStrength: { $sum: [ '$strength.a', '$strength.b'] } } } } }
] )

但是如何对每个组的“users”数组中的元素进行排序和限制数量?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com