$first 在 mongodb [英] $first in mongodb

查看:9
本文介绍了$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?

推荐答案

需要使用$first 聚合算子在应用 $group 阶段.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆