MongoDB 聚合,查找文档数组中不同值的数量

标签 mongodb pymongo

阅读the docs ,我看到你可以获取文档数组中的元素数量。例如给出以下文档:

{ "_id" : 1, "item" : "ABC1", "description" : "product 1", colors: [ "blue", "black", "red" ] }
{ "_id" : 2, "item" : "ABC2", "description" : "product 2", colors: [ "purple" ] }
{ "_id" : 3, "item" : "XYZ1", "description" : "product 3", colors: [ ] }

以及以下查询:

db.inventory.aggregate([{$project: {item: 1, numberOfColors: { $size: "$colors" }}}])

我们将获取每个文档的 colors 数组中的元素数量:

{ "_id" : 1, "item" : "ABC1", "numberOfColors" : 3 }
{ "_id" : 2, "item" : "ABC2", "numberOfColors" : 1 }
{ "_id" : 3, "item" : "XYZ1", "numberOfColors" : 0 }

我无法弄清楚是否以及如何直接从查询中总结所有文档中的所有颜色,即:

{ "totalColors": 4 }

最佳答案

您可以使用以下查询来获取所有文档中所有颜色的计数:

db.inventory.aggregate([ 
  { $unwind: '$colors' } , // expands nested array so we have one doc per each array value 
  { $group: {_id: null, allColors: {$addToSet: "$colors"} } }  , // find all colors
  { $project: { totalColors: {$size: "$allColors"}}} // find count of all colors
 ])

关于MongoDB 聚合,查找文档数组中不同值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269591/

相关文章:

java - MongoDB 索引在 find 方法上性能更好?

mongodb - 如何在golang中编写bson形式的mongo查询?

java - 如何使用 spring 数据在 mongo 聚合中构建 $group 的组合 _id 属性?

python - Mongo 聚合 - 使用 $project 中创建的变量

nginx - gevent 会加速 pymongo 连接吗

java - 在 mongoDB 中创建唯一索引

python通过http将正则表达式传递给mongo

python - mongoengine - 动态生成 Q()

python - import pymongo 在 Python 解释器中工作,但在脚本中不工作

python - 如何使用python从mongoDB中的10亿个文档中获取随机单个文档?