MongoDB聚合—计数count

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB聚合—计数count
Definition
定义
count
计数
    Counts the number of documents in a collection. Returns a document that contains this count and as well as the command status.
     统计某个集合中文档的数量。返回一个包含计数和命令状态的文档。
     例如:{ "shards" : { "s1" : 5 }, "n" : 5, "ok" : 1 }

    count has the following form:
    计数有以下格式:
    {
      count: <collection-name>,
      query: <document>,
      limit: <integer>,
      skip: <integer>,
      hint: <hint>,
      readConcern: <document>
    }


例如:
mongos> db.runCommand(
...    {
...      count:"codetest1",
...      query:{ "deviceCode" : "2017014504"},
...      limit:10,
...      skip:1,
...      hint:"deviceCode_1"
...    }
... )

返回结果:{ "shards" : { "s1" : 11 }, "n" : 10, "ok" : 1 }

    count has the following fields:
    计数有以下几个字段:
    Field  Type   Description
    count  string   The name of the collection to count.
    计数,字符类型,计数集合的名称。
    query  document    Optional. A query that selects which documents to count in a collection.
     查询,文档类型,可选。查询集合中哪些要计数的文档。
    limit     integer Optional. The maximum number of matching documents to return.
    限制,整数,可选。返回匹配文档的最大行数。
    skip integer     Optional. The number of matching documents to skip before returning results.
     跳跃,整数,可选。在返回结果集前,跳过匹配文档的行数。
    hint string or document   
    强制,字符类型或者文档类型
    Optional. The index to use. Specify either the index name as a string or the index specification document.
    可选。强制使用索引。如果使用字符类型则指定索引名称,如果使用文档类型则指定索引文档。
    New in version 2.6.
    readConcern    document    
    读策略,文档类型。
    Optional. Specifies the read concern. The default level is "local".
    可选。指定读内容。默认级别为"local"。
    To use a read concern level of "majority", you must use the WiredTiger storage engine and start the mongod instances with the --enableMajorityReadConcern command line option (or the replication.enableMajorityReadConcern setting if using a configuration file).
    如果将级别设置为"majority",你必须使用WiredTiger存储引擎,并且在启动mongod实例时指定--enableMajorityReadConcern参数)(或者在config参数配置文档中指定replication.enableMajorityReadConcern参数)。
博文参考:MongoDB readConcern 原理解析
    Only replica sets using protocol version 1 support "majority" read concern. Replica sets running protocol version 0 do not support "majority" read concern.
    只有副本集使用"protocol version 1 "才支持"majority"读策略。副本集运行"protocol version 0"不支持"majority"读策略。
    To ensure that a single thread can read its own writes, use "majority" read concern and "majority" write concern against the primary of the replica set.
     要确保单个线程可以读取其自己的写入,请针对副本集的主数据库使用"majority"读取关注和"majority"写入关注。
    To use a read concern level of "majority", you must specify a nonempty query condition.
    为了使用读关注级别"majority",必须指定一个非空的查询条件。
    New in version 3.2.
    版本3.2新功能
    MongoDB also provides the count() and db.collection.count() wrapper methods in the mongo shell.
    MongoDB在mongo shell窗口可以使用count()和db.collection.count()进行查询。
Behavior
行为
On a sharded cluster, count can result in an inaccurate count if orphaned documents exist or if a chunk migration is in progress.
在分片集合中,如果存储孤立文档或者Chunk正在迁移,则会导致计数的结果可能会不正确。

To avoid these situations, on a sharded cluster, use the $group stage of the db.collection.aggregate() method to $sum the documents. For example, the following operation counts the documents in a collection:
为了避免分片集群发生这种情况,使用db.collection.aggregate()命令中的$group方法进行文档$sum求和。例如以下对一个集合进行计数操作
db.collection.aggregate(
   [
      { $group: { _id: null, count: { $sum: 1 } } }
   ]
)

To get a count of documents that match a query condition, include the $match stage as well:
为了统计满足查询条件的文档数量,可以使用$match方法。
db.collection.aggregate(
   [
      { $match: <query condition> },
      { $group: { _id: null, count: { $sum: 1 } } }
   ]
)

See Perform a Count for an example.
下面执行一下计数的例子。
The following example selects documents to process using the $match pipeline operator and then pipes the results to the $group pipeline operator to compute a count of the documents:
以下例子先使用$match管道方法过滤出文档,然后将结果传输给$group管道方法来完成文档计数。
db.articles.aggregate( [
  { $match: { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } },
  { $group: { _id: null, count: { $sum: 1 } } }
] );

In the aggregation pipeline, $match selects the documents where either the score is greater than 70 and less than 90 or the views is greater than or equal to 1000. These documents are then piped to the $group to perform a count. The aggregation returns the following:
在聚合管道中,$match查询出满足条件的文档,即分数大于79,且小于90的文档;或者阅读量大于等于1000的文档。查询出来的文档传给$group方法完成计数。聚合返回的结果如下:
{ "_id" : null, "count" : 5 }

Accuracy after Unexpected Shutdown
意外关机后的准确性
After an unclean shutdown of a mongod using the Wired Tiger storage engine, count statistics reported by count may be inaccurate.
如果一个mongod进程(使用Wired Tiger存储引擎)未正常关闭,计数统计出现可能会不正确。

The amount of drift depends on the number of insert, update, or delete operations performed between the last checkpoint and the unclean shutdown. Checkpoints usually occur every 60 seconds. However, mongod instances running with non-default --syncdelay settings may have more or less frequent checkpoints.
偏差值取决于在最后一个检查点和不正常关闭之间执行的插入,更新或删除操作的数量。 检查点通常每60秒发生一次。 但是,使用非默认--syncdelay设置运行的mongod实例可能有更多或更少的频繁检查点。
Run validate on each collection on the mongod to to restore the correct statistics after an unclean shutdown.
在不正常关闭后,在mongod上对每个集合运行validate以恢复正确的统计信息。
Note
注意
This loss of accuracy only applies to count operations that do not include a query document.
此精度影响仅适用于不包含查询文档的计数操作。
Examples
举例
The following sections provide examples of the count command.
以下内容举例演示计数命令操作。
Count All Documents
统计所有文档数。
The following operation counts the number of all documents in the orders collection:
以下计数操作统计orders命令中所有的文档数量。
db.runCommand( { count: 'orders' } )

In the result, the n, which represents the count, is 26, and the command status ok is 1:
返回结果中,n代表计数值是26条,并且命令执行状态ok是1。
{ "n" : 26, "ok" : 1 }

Count Documents That Match a Query
对于符合查询条件的文档计数
The following operation returns a count of the documents in the orders collection where the value of the ord_dt field is greater than Date('01/01/2012'):
以下操作统计orders集合中ord_dt字段值大于Date('01/01/2012')的文档数。
db.runCommand( { count:'orders',
                 query: { ord_dt: { $gt: new Date('01/01/2012') } }
               } )

In the result, the n, which represents the count, is 13 and the command status ok is 1:
返回结果中,n代表计数值为13,并且命令状态ok值为1。
{ "n" : 13, "ok" : 1 }

Skip Documents in Count
跳过文档计数
The following operation returns a count of the documents in the orders collection where the value of the ord_dt field is greater than Date('01/01/2012') and skip the first 10 matching documents:
以下操作统计orders集合中ord_dt字段大于Date('01/01/2012') 并且跳过前10条匹配文档的数量。
db.runCommand( { count:'orders',
                 query: { ord_dt: { $gt: new Date('01/01/2012') } },
                 skip: 10 }  )

In the result, the n, which represents the count, is 3 and the command status ok is 1:
返回结果中,n代表计数值为3,并且命令状态ok值为1。
{ "n" : 3, "ok" : 1 }

Specify the Index to Use
计数中指定索引

The following operation uses the index { status: 1 } to return a count of the documents in the orders collection where the value of the ord_dt field is greater than Date('01/01/2012') and the status field is equal to "D":
以下计数操作是使用orders集合中的索引 { status: 1 } ,并且统计ord_dt字段大于Date('01/01/2012')并且status字段值为"D"
db.runCommand(
   {
     count:'orders',
     query: {
              ord_dt: { $gt: new Date('01/01/2012') },
              status: "D"
            },
     hint: { status: 1 }
   }
)

In the result, the n, which represents the count, is 1 and the command status ok is 1:
返回结果中,n代表计数值为1,并且状态ok为1。
{ "n" : 1, "ok" : 1 }

Override Default Read Concern
覆盖默认读关注
To override the default read concern level of "local", use the readConcern option.
为了覆盖默认读关注级别"local",使用readConcern选项。
The following operation on a replica set specifies a Read Concern of "majority" to read the most recent copy of the data confirmed as having been written to a majority of the nodes.
在副本集上指定读关注级别为"majority",为了读取当前已经同步到所有节点的数据。
Important
重要
    To use a read concern level of "majority", you must use the WiredTiger storage engine and start the mongod instances with the --enableMajorityReadConcern command line option (or the replication.enableMajorityReadConcern setting if using a configuration file).
为了使用 "majority"读关注级别,必须使用WiredTiger存储引擎,并且在启动命令行中加入--enableMajorityReadConcern选项(或者在参数配置文档中加入replication.enableMajorityReadConcern)。

    Only replica sets using protocol version 1 support "majority" read concern. Replica sets running protocol version 0 do not support "majority" read concern.
只有副本集使用"protocol version 1 "才支持"majority"读关注。副本集运行"protocol version 0"不支持"majority"读策略。

    To use the readConcern level of "majority", you must specify a nonempty query condition.
    为了使用读关注级别"majority",必须指定一个非空的查询条件。
    Regardless of the read concern level, the most recent data on a node may not reflect the most recent version of the data in the system.
    无论读取关注级别如何,节点上的最新数据可能不会反映系统中数据的最新版本。
db.runCommand(
   {
     count: "restaurants",
     query: { rating: { $gte: 4 } },
     readConcern: { level: "majority" }
   }
)

To ensure that a single thread can read its own writes, use "majority" read concern and "majority" write concern against the primary of the replica set.
要确保单个线程可以读取其自己的写入,请针对副本集的主数据库使用"majority"读取关注和"majority"写入关注。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
9天前
|
SQL NoSQL Unix
MongoDB 聚合
10月更文挑战第17天
14 4
|
2月前
|
SQL NoSQL Unix
MongoDB聚合操作总结
这篇文章总结了MongoDB中聚合操作的作用、方法、常见聚合表达式以及聚合管道的概念和常用操作符,以及SQL与MongoDB聚合操作的对应关系。
37 2
MongoDB聚合操作总结
|
9天前
|
SQL NoSQL 数据处理
深入探索MongoDB的聚合操作
【10月更文挑战第13天】
8 0
|
2月前
|
NoSQL MongoDB 数据库
python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)
这篇文章提供了使用Python操作MongoDB数据库进行CRUD(创建、读取、更新、删除)操作的详细代码示例,以及如何执行聚合查询的案例。
28 6
|
2月前
|
SQL NoSQL JavaScript
04 MongoDB各种查询操作 以及聚合操作总结
文章全面总结了MongoDB中的查询操作及聚合操作,包括基本查询、条件筛选、排序以及聚合管道的使用方法和实例。
63 0
|
3月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
68 1
|
3月前
|
NoSQL BI 数据处理
【超实用攻略】MongoDB 聚合框架:从入门到精通,带你解锁数据处理新姿势!
【8月更文挑战第24天】MongoDB是一款以其灵活性和高性能闻名的NoSQL数据库。其强大的聚合框架采用管道式处理,允许用户定义多个数据处理阶段如过滤、分组等。本文通过示例数据库`orders`和`products`,演示如何利用聚合框架计算各产品的总销售额。示例代码展示了使用`$lookup`连接两集合、`$unwind`打平数组及`$group`按产品ID分组并计算总销售额的过程。这突显了聚合框架处理复杂查询的强大能力,是进行数据分析和报表生成的理想选择。
40 3
|
3月前
|
存储 NoSQL JavaScript
MongoDB存储过程实战:聚合框架、脚本、最佳实践,一文全掌握!
【8月更文挑战第24天】MongoDB是一款备受欢迎的文档型NoSQL数据库,以灵活的数据模型和强大功能著称。尽管其存储过程支持不如传统关系型数据库,本文深入探讨了MongoDB在此方面的最佳实践。包括利用聚合框架处理复杂业务逻辑、封装业务逻辑提高复用性、运用JavaScript脚本实现类似存储过程的功能以及考虑集成其他工具提升数据处理能力。通过示例代码展示如何创建订单处理集合并定义验证规则,虽未直接实现存储过程,但有效地演示了如何借助JavaScript脚本处理业务逻辑,为开发者提供更多实用指导。
60 2
|
3月前
|
存储 NoSQL 数据处理
【MongoDB大神级操作】揭秘聚合框架,让你的数据处理能力瞬间飙升,秒变数据界的超级英雄!
【8月更文挑战第24天】MongoDB是一款备受欢迎的非关系型数据库,以其灵活的文档模型和出色的可扩展性著称。其聚合框架尤其亮眼,能高效地对数据库中的数据执行复杂的转换与聚合操作,无需将数据导出到应用端处理,极大提升了数据处理的效率与灵活性。例如,在一个大型电商数据库中,聚合框架能轻松分析出最热卖的商品或特定时段内某类别商品的销售总额。通过一系列管道操作,如$unwind、$group等,可以对数据进行逐步处理并得到最终结果,同时还支持过滤、排序、分页等多种操作,极大地丰富了数据处理的能力,成为进行数据分析、报表生成及复杂业务逻辑实现的强大工具。
56 2
|
3月前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
69 0