Mongodb 查询用于计算所有文档中的不同值

标签 mongodb mongodb-query aggregation-framework

示例文档:

{"id": "1",  "movie_data": "enemies": ["a", "b", "v-glaive", "t-midnight", "t-obsidian", "u-klaue"], "groups": ["avengers"], "movies": []}
{"id": "2",  "movie_data": "enemies": ["a", "d"], "groups": ["avengers"], "movies": []}
{"id": "3",  "movie_data": "enemies": ["a", "b", "c", "d"], "groups": ["avengers"], "movies": []}

在这里,我需要组 - 复仇者和敌人计为所有集合中敌人的不同值。

Avenger - enemy count - 9

最佳答案

您可以使用 MongoDB 的 aggregation-pipeline 来完成它:

db.collection.aggregate([
   /** unwind creates multiple docs for each value in array */
  {
    $unwind: "$movie_data.groups"
  },
  /** Pick docs where we've groups as 'avengers' */
  {
    $match: {
      "movie_data.groups": "avengers"
    }
  },
  {
    $unwind: "$movie_data.enemies"
  },
  {
    $group: {
      _id: "$movie_data.groups",
      uniqueEmemies: {
        $addToSet: "$movie_data.enemies" /** Adds unique value to array */
      }
    }
  },
  {
    $project: {
      _id : 0,
      group: "$_id",
      uniqueEnemyCount: {
        $size: "$uniqueEmemies"
      }
    }
  }
])

测试: mongoplayground

关于Mongodb 查询用于计算所有文档中的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61294443/

相关文章:

python-3.x - pymongo 将 mongoDB 日期转换为 python 日期时间

java - mongo java 驱动程序比 shell 慢(15 倍)

javascript - 将数组中的字符串值连接到 MongoDB 的单个字段中

java - 映射到具有复合键的类时,Spring Data MongoDB 中的分组返回 NULL _id

python - 溢出错误: MongoDB can only handle up to 8-byte ints?

javascript - Mongodb find 不适用于 Objectid

node.js - MongoDB 是否查询客户端操作?

javascript - MongoDB - 两个多边形的地理空间交集

javascript - MongoDB:聚合函数中的字符串字段的 parseFloat ($avg)

mongodb - Mongodb - 过滤嵌套数组中的数据元素