当前位置: 首页 > 面试题库 >

在mongodb中的$ first

汪飞捷
2023-03-14
问题内容

我有一个MongoDB查询,例如

// 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' } } },
]);

我想$lookupappusers得到的每一个细节appusers。我怎么做?


问题答案:

$first
应用
$group

阶段后,需要使用聚合运算符返回第一个文档。

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" },
  }}
])


 类似资料:
  • 我在从MongoDB数据库检索ObjectID时遇到了一个问题,但在通过json_encode运行时,“_id”值总是消失。数组中的所有其他数据都存在。我的代码如下: 结果如下: 至少,_id应该包含一个对象或数字。我的问题是什么在剥离\MongoDB\BSON\ObjectID,以及如何让它保留下来?

  • 问题内容: 我的应用程序大量使用JSON对象(org.json.JSONArray和朋友)。将它们存储到Mongo DBObjects中以便查询它们的最有效方法是什么?BasicDBObject无法序列化JSONArray,这两个层次结构之间似乎根本没有互操作性。 问题答案: 好的,似乎没有互操作性,所以我自己动手了。忙于避开类型系统:

  • 在看到这篇文档后,我试图在运行Ubuntu18.04的WSL中安装MongoDB。但是MongoDB说: 重要信息 Ubuntu提供的包不由MongoDB Inc.维护,并且与官方的包冲突。如果您已经在您的Ubuntu系统上安装了mongodb包,那么在继续执行这些说明之前,您必须首先卸载mongodb包。

  • 问题内容: 我有一个Java应用程序,它在MongoDB上执行一些聚合,但是有时它会挂起并抛出SocketTimeout异常。异常发生后,应用程序将正常运行(稍等片刻,然后它可能会再次引发异常)。 我刚刚发现这种解释似乎是可能的原因,但不确定。 我启动MongoClient并保持与数据库的连接打开。我不确定这是否可能是一个问题,我应该每次都获取数据库,然后让数据库进行垃圾回收(并关闭连接)。 另一

  • 我已经在一台具有三个不同端口(例如27018[master]、27019、27020)的机器中进行了复制。我还在一台机器上用两个不同的端口(比如27021、27022)进行了分片。 现在我必须为分片的计算机端口实现复制。我需要为27021和27022实现复制。我怎么能这么做?请帮我解决这个问题。 null

  • 我遵循下面的指导方针在我的Quarkus服务器应用程序中实现MongoDB ORM。 例如:如果我有两个实体,如Employee,Organization,那么我如何在Employee实体中引用Organization?