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

带计数和分组的Mongoose聚合

澹台俊达
2023-03-14

我正在查找与url匹配但返回自定义对象的记录。

我有这个模型。。

const ReactionSchema = mongoose.Schema({
  url: {
    type: String,
    required: true
  },

  emoji: {
    type: String,
    enum: ['happy', 'sad', 'angry'],
    required: true
  },

  ip: {
    type: String
  }
})

我想查询该模型并匹配url,但返回如下响应:

[
  {
    "emoji": "happy",
    "count": 4,
    "reacted": true
  },
  {
    "emoji": "sad",
    "count": 9,
    "reacted": false
  },
  {
    "emoji": "angry",
    "count": 7,
    "reacted": false
  }
]

我需要能够通过将记录的ip与过程中的变量进行比较,动态计算反应的ip是否为真。

一次尝试是

.aggregate([
  {$match: {url}},
  {$group: {
    _id: '$emoji',
    count: {$sum: 1}
  }}
])

但我似乎无法集中IP并查看我的变量IP是否在该数组中。

谢谢你的帮助。我第一次问!

共有1个答案

单喜
2023-03-14

$ush运算符添加到$group阶段以创建ip数组。

添加一个$项目阶段,用于将id重命名为表情符号,并计算反应字段。

当输入变量数组是ips数组的子集时,将先前计算的ips数组与输入变量进行比较,并返回true

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

  • 我有两个模型;一个用于用户,另一个用于学习组。每个StudyGroup都有一个唯一的字段。用户模型有一个studyGroups字段,它是字符串的数组。一个用户可以加入多个学习组。 用户模型

  • 问题内容: 我在SQL Server中有一个日志表,看起来像这样: 我想要的是一个结果列表,该列表表示每天处理了多少种不同的退款,并抛出了所有NULL。 我需要编写什么SQL才能产生这些结果? 问题答案: 我喜欢(MS SQL)中的这种方法:

  • 问题内容: 考虑Oracle表。我想用顶薪与获得职工和。还假定没有“ empno”列,并且主键涉及许多列。您可以使用以下方法执行此操作: 这可行,但我必须重复测试deptno = 20和job =’CLERK’,这是我想避免的。有没有更优雅的方式编写此代码,也许使用?顺便说一句,如果这很重要,我正在使用Oracle。 问题答案: 以下内容经过了精心设计,但对于“ top x”查询而言,这是一个很好

  • 问题内容: 我面临着一个持续的问题,那就是将授权,组成和聚合彼此区分开来,并确定在哪种情况下最好相互使用。 我已经查阅了一本Java OO分析和设计书,但是我的困惑仍然存在。主要的解释是这样的: 委托 :当我的对象按原样使用另一个对象的功能而不更改它时。 组成 :我的对象由其他对象组成,这些对象在我的对象被销毁并收集垃圾后便不再存在。 聚集 :我的对象由其他对象组成,即使我的对象被破坏,它们也可以

  • 我们建立了三个节点的mariaDB galera集群,基本上是一个多主集群,在集群中的节点之间同步复制数据,最终实现了集群中任意节点的读/写操作。然而,这并没有解决我们的问题。由于mariadb有不同的口味,如mariadb maxscale用于分片,我们还可以在galera集群中应用异步复制。同时,我们还可以利用galera集群上的ReaWrite拆分器和schemaRouter进行负载分配。如