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"写入关注。

时间: 2024-10-30 01:24:17

MongoDB聚合—计数count的相关文章

Mongodb聚合函数count、distinct、group如何实现数据聚合操作_MongoDB

 上篇文章给大家介绍了Mongodb中MapReduce实现数据聚合方法详解,我们提到过Mongodb中进行数据聚合操作的一种方式--MapReduce,但是在大多数日常使用过程中,我们并不需要使用MapReduce来进行操作.在这边文章中,我们就简单说说用自带的聚合函数进行数据聚合操作的实现. MongoDB除了基本的查询功能之外,还提供了强大的聚合功能.Mongodb中自带的基本聚合函数有三种:count.distinct和group.下面我们分别来讲述一下这三个基本聚合函数. (1)cou

MongoDB 聚合管道(Aggregation Pipeline)

管道概念 POSIX多线程的使用方式中, 有一种很重要的方式-----流水线(亦称为"管道")方式,"数据元素"流串行地被一组线程按顺序执行.它的使用架构可参考下图: 以面向对象的思想去理解,整个流水线,可以理解为一个数据传输的管道:该管道中的每一个工作线程,可以理解为一个整个流水线的一个工作阶段stage,这些工作线程之间的合作是一环扣一环的.靠输入口越近的工作线程,是时序较早的工作阶段stage,它的工作成果会影响下一个工作线程阶段(stage)的工作结果,即下

MongoDB聚合功能浅析_MongoDB

MongoDB数据库功能强大!除了基本的查询功能之外,还提供了强大的聚合功能.这里简单介绍一下count.distinct和group. 1.count:     --在空集合中,count返回的数量为0. > db.test.count() 0 --测试插入一个文档后count的返回值. > db.test.insert({"test":1}) > db.test.count() 1 > db.test.insert({"test":2})

MongoDB教程之聚合(count、distinct和group)_MongoDB

1. count: 复制代码 代码如下:     --在空集合中,count返回的数量为0.     > db.test.count()     0     --测试插入一个文档后count的返回值.     > db.test.insert({"test":1})     > db.test.count()     1     > db.test.insert({"test":2})     > db.test.count()    

oracle中的聚合函数count、max、min、sum、avg等等

前面我们介绍了很多oracle中单行函数,在oracle中还存在另一类函数,那就是聚合函数,oracle中的聚合函数非常有用,主要是用来做些统计.平均之类的工作,你必须牢记. 先简单介绍一下几个常用的oracle中的聚合函数. Oracle中聚合函数名称 函数的作用 Count 用来求有效数据的数量 Max 用来求给定数据中最大的那一个数据 Min 用来求给定数据中最小的那一个数据 Avg 用来求给定数据的平均值 Sum 用来求给定数据的总和 Variance 用来求给定数据的标准差 Stdde

博文目录清单

Oracle运维 在线修改Redo log的大小及增加新的日志组 Oracle 10.2.0.1.0数据库启动报错 ORA-00600 [keltnfy-ldminit] Oracle部署 Linux 静默安装CentOS 6.6系统上安装Oracle 11gR2(11.2.0.4) Oracle故障 ORA-07445: exception encountered: core dump [kkestGetColGroupNdv()+20] MongoDB实施 CentOS 6.5环境 Mong

Mongodb中MapReduce实现数据聚合方法详解_MongoDB

Mongodb是针对大数据量环境下诞生的用于保存大数据量的非关系型数据库,针对大量的数据,如何进行统计操作至关重要,那么如何从Mongodb中统计一些数据呢? 在Mongodb中,给我们提供了三种用于数据聚合的方式: (1)简单的用户聚合函数: (2)使用aggregate进行统计: (3)使用mapReduce进行统计: 今天我们首先来讲讲mapReduce是如何统计,在后续的文章中,将另起文章进行相关说明. MapReduce是啥呢?以我的理解,其实就是对集合中的各个满足条件的文档进行预处理

mongodb入门

链接 安装 图形客户端 操作命令 1 链接 个人博客: alex-my.xyz CSDN: blog.csdn.net/alex_my 2 安装 方便的可以使用brew, yum安装. 源码安装 进入 https://www.mongodb.com/download-center?jmp=homepage#community 选择相应平台 这里选择 https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.4.5.tgz wget https

《卸甲笔记》-PostgreSQL和Oracle的SQL差异分析之三:rownum和聚合函数

PostgreSQL是世界上功能最强大的开源数据库,在国内得到了越来越多机构和开发者的青睐和应用.随着PostgreSQL的应用越来越广泛,Oracle向PostgreSQL数据库的数据迁移需求也越来越多.数据库之间数据迁移的时候,首先是迁移数据,然后就是SQL.存储过程.序列等程序中不同的数据库中数据的使用方式的转换.下面根据自己的理解和测试,写了一些SQL以及数据库对象转换方面的文章,不足之处,尚请多多指教. rownum rownum是Oracle内部的一个伪列,用来表示数据在结果集中的行