所以我得到了以下数据:
用户集合
{
_id: ObjectId("62a2a0422ec90fea68390aaa"),
name: 'Robert Yamashita',
username: 'robyama',
email: 'robert.yamashita@rocketmail.com',
},
{
_id: ObjectId("62a2a0452ec90fea68390aad"),
name: 'Charles X',
username: 'cvx',
email: 'charles.xxx@rocketmail.com',
}
点数集合
{
userId: ObjectId("62a2a0422ec90fea68390aaa"),
action: 'Liked a post',
points: 10,
}
{
userId: ObjectId("62a2a0422ec90fea68390aaa"),
action: 'Liked a post',
points: 10,
}
{
userId: ObjectId("62a2a0452ec90fea68390aad"),
action: 'Liked a comment',
points: 5,
}
我使用以下查询创建了一个管道来获取用户名robyama的总分:
db.users.aggregate([
{ $match: { username: 'robyama' } },
{
$lookup: {
from: 'points',
localField: '_id',
foreignField: 'user',
as: 'userPoints'
}
},
{
$unwind: '$userPoints'
},
{
$group: {
_id: {
name: '$name',
email: '$email',
username: '$username',
},
count: { $sum: '$userPoints.points' }
}
}
]);
我得到了以下结果:
{
"_id": {
"name": "Robert Yamashita",
"email": "robert.yamashita@rocketmail.com",
"username": "robyama",
},
"count": 20
}
这正是我需要的,但我想在返回的查询中添加一个排名字段,因为Robert有20分,而Charles只有5分.所以理想情况下,我希望结果是这样的:
{
"_id": {
"name": "Robert Yamashita",
"email": "robert.yamashita@rocketmail.com",
"username": "robyama",
},
"count": 20
"rank": 1
}
我应该在我的管道中添加什么才能获得上述输出?如有任何帮助,将不胜感激!