当前位置: 首页 > 知识库问答 >
问题:

MongoDB。聚合两个数组大小之和

祁博雅
2023-03-14

使用MongoDB 3.4。10和猫鼬4.13。6我能够计算用户模型上两个阵列的大小:

User.aggregate()
  .project({
    '_id': 1,
    'leftVotesCount': { '$size': '$leftVoted' },
    'rightVotesCount': { '$size': '$rightVoted' }
  })

我的用户所在的位置(perdb.Users.find()

{“_id”:ObjectId(“5a2b21e63023c6117085c240”),“右投票”:[2],“左投票”:[1,6]}

{“_id”:ObjectId(“5a2c0d68efde3416bc8b7020”),“右投票”:[2],“左投票”:[1]}

在这里,我得到了预期的结果:

[{u id:'5a2b21e63023c6117085c240',leftVotesCount:2,righVotesCount:1},

{{u id:'5a2c0d68efde3416bc8b7020',leftVotesCount:1,righVotesCount:1}]

问题如何获取leftVotesCountrighVotesCount数据的累积值?我试着说:

User.aggregate()
  .project({
    '_id': 1,
    'leftVotesCount': { '$size': '$leftVoted' },
    'rightVotesCount': { '$size': '$rightVoted' },
    'votesCount': { '$add': [ '$leftVotesCount', '$rightVotesCount' ] },
    'votesCount2': { '$sum': [ '$leftVotesCount', '$rightVotesCount' ] }
  })

但是对于这两个用户,votescont都是nullvotescont2都是0。我期望用户1的votescont=3,用户2的votescont=2

共有3个答案

夏侯博
2023-03-14

原来$add支持嵌套表达式,所以我能够通过排除中间变量来解决这个问题:

User.aggregate().project({
  '_id': 1,
  'votesCount': { '$add': [ { '$size': '$leftVoted' }, { '$size': '$rightVoted' } ] }
});

// [ {_id: '...', votesCount: 3}, {_id: '...', votesCount: 2} ]
法和硕
2023-03-14

不能引用在同一项目阶段中创建的项目变量。

您可以将变量包装在$let表达式中。

User.aggregate().project({
  "$let": {
    "vars": {
      "leftVotesCount": {
        "$size": "$leftVoted"
      },
      "rightVotesCount": {
        "$size": "$rightVoted"
      }
    },
    "in": {
      "votesCount": {
        "$add": [
          "$$leftVotesCount",
          "$$rightVotesCount"
        ]
      },
      "leftVotesCount": "$$leftVotesCount",
      "rightVotesCount": "$$rightVotesCount"
    }
  }
})
葛越泽
2023-03-14

$leftVotesCount$rightVotesCount仅在下一阶段变得可用。尝试类似的东西:

User.aggregate()
  .project({
    '_id': 1,
    'leftVotesCount': { '$size': '$leftVoted' },
    'rightVotesCount': { '$size': '$rightVoted' }
  })
  .project({
    '_id': 1,
    'leftVotesCount': 1,
    'rightVotesCount': 1
    'votesCount': { '$add': [ '$leftVotesCount', '$rightVotesCount' ] },
    'votesCount2': { '$sum': [ '$leftVotesCount', '$rightVotesCount' ] }
  })
 类似资料:
  • {应用程序:“ABC”,日期:time.now,状态:“1”user_id:[id1,id2,id4]} {应用程序:“ABC”,日期:time.listerment,状态:“1”,user_id:[id1,id3,id5]} {应用程序:“ABC”,日期:time.ystayday-1,状态:“1”,user_id:[id1,id3,id5]} 我目前正在使用聚合框架并计算MongoDB之外的I

  • 本文向大家介绍MongoDB聚合分组多个结果,包括了MongoDB聚合分组多个结果的使用技巧和注意事项,需要的朋友参考一下 要聚合多个结果,请在MongoDB中使用$group。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是汇总组多个结果的查询- 这将产生以下输出-

  • 我有一个问题,给你两个数组,比如: 这意味着第一个数组中有5个数字,第二个数组中有3个数字。第二行是第一个数组,第三行是第二个数组。这个程序的目标是将第二个数组中的数字插入第一个数组(可以分开),从而使组合数组的所有位置都是奇数(第一、第三、第五……)数字加起来就是可能的最大数字。上述问题的输出示例: 既然阵列变成了 我试图利用第一个数组中的差异,通过 并找到差异最大的地方在第二个数组中插入数字。

  • 假设我有一个MongoDB集合,其中包含以下信息: 我想计算按州分组的订单总价的总和,其中项目为“苹果”,颜色为“红色”。我的问题是: 但是,我希望能够将我的结果cust\u id包含在\u id中,它是一个数组/映射/一些结构,其中包含构成我的合计的所有客户id的列表。因此,我希望我的输出包含 是否有办法处理此mongo聚合/查询?或者是一种更好的方式来构造此查询,以便我可以按州分组计算红苹果的

  • 我使用的是MongoDB 3.2。 在这个问题上遇到问题。。。 (为类似SQL的语法提前道歉,我只是从SQL学习Mongo) 我需要找到文件的数量 按类别分组 订购人 有没有办法将查询中的字符串转换为日期?我知道我在存储shop2。当日期应为ISODate时,将其作为字符串。如果不是,我们就假设它是一个ISODate。 下面是一个文档示例: 任何帮助都将不胜感激。谢谢 我已经更新了所有的shop1

  • 本文向大家介绍MongoDB教程之聚合(count、distinct和group),包括了MongoDB教程之聚合(count、distinct和group)的使用技巧和注意事项,需要的朋友参考一下 1. count:      2. distinct:     distinct用来找出给定键的所有不同的值。使用时也必须指定集合和键。   3. group:     group做的聚合有些复杂。先