$first 在 mongodb [英] $first in mongodb
本文介绍了$first 在 mongodb的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个类似的 MongoDB 查询
I have a MongoDB query like
// Get scoreboard of challenge
response.aggregate = await ScoreBoardModel.aggregate([
{ $match: { challenge_id: mongoose.Types.ObjectId(req.body.challenge_id) } },
{ $group: { _id: '$user_id', value: { $sum: '$value' } } },
]);
哪些输出像
[
{
"_id": "5b762887b6e3a91c60c01718",
"value": 4300
},
{
"_id": "5b8b41f10186400163d0df83",
"value": 6800
},
{
"_id": "5b762590b6e3a91c60c01713",
"value": 2023
}
]
但我想执行如下查询:
response.aggregate = await ScoreBoardModel.aggregate([
{ $match: { challenge_id: mongoose.Types.ObjectId(req.body.challenge_id) } },
{ $lookup: {
from: 'appusers',
let: { 'user_id': '$user_id' },
pipeline: [{ $match: { $expr: { $eq: [ '$_id', '$$user_id' ] } } },],
as: 'user'
} },
{ $group: { _id: '$user_id', value: { $sum: '$value' } } },
]);
我想在 appusers
中进行 $lookup
以获取每个 appusers
的详细信息.我该怎么做?
I want to $lookup
in appusers
to get details of each appusers
.
How do i do that?
推荐答案
You need to use $first
aggregation operator to return the first document after applying the $group
stage.
ScoreBoardModel.aggregate([
{ "$match": { challenge_id: mongoose.Types.ObjectId(req.body.challenge_id) } },
{ "$lookup": {
"from": "appusers",
"let": { "user_id": "$user_id" },
"pipeline": [{ "$match": { "$expr": { "$eq": [ "$_id", "$$user_id" ] } } }],
"as": "user"
}},
{ "$group": {
"_id": "$user_id",
"value": { "$sum": "$value" },
"appusers": { "$first": "$user" },
}}
])
这篇关于$first 在 mongodb的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文