Definition 定义

将包含输入到该 stage 的文档数量的文档传递到下一个 stage。

NOTE 歧义澄清(Disambiguation) 本页描述了$countaggregation pipeline stage。关于$countaggregation accumulator(聚合累加器),参阅 $count(aggregation accumulator)

$count的原型形式如下:

  1. { $count: <string> }

<string>是输出字段的名称,该字段以计数(输入文档的数量)为其值。<string>必须是一个非空的字符串,不能以$开头,也不能包含.字符。

TIP 参阅:

Behavior 行为

$countstage 相当于下面的 $group + $project 序列(sequence)。

  1. db.collection.aggregate( [
  2. { $group: { _id: null, myCount: { $sum: 1 } } },
  3. { $project: { _id: 0 } }
  4. ] )

其中myCount是包含计数(输入文档的数量)的输出字段。你可以为输出字段指定另一个名称。

TIP 参阅: db.collection.countDocuments() 它用一个 $sum expression 包装了 $group aggregation stage。

Example 例子

一个名为scores的 collection 有以下文档:

  1. { "_id" : 1, "subject" : "History", "score" : 88 }
  2. { "_id" : 2, "subject" : "History", "score" : 92 }
  3. { "_id" : 3, "subject" : "History", "score" : 97 }
  4. { "_id" : 4, "subject" : "History", "score" : 71 }
  5. { "_id" : 5, "subject" : "History", "score" : 79 }
  6. { "_id" : 6, "subject" : "History", "score" : 83 }

下面的 aggregation operation 有两个 stage:

  1. $match stage 排除score值小于或等于80的文档,将score大于80的文档传递到下一个 stage。
  2. $countstage 返回 aggregation pipeline 中剩余文档的数量,并将该值分配给一个叫做passing_scores的字段。
    1. db.scores.aggregate( [
    2. {
    3. $match: {
    4. score: {
    5. $gt: 80
    6. }
    7. }
    8. },
    9. {
    10. $count: "passing_scores"
    11. }
    12. ] )
    该 operation 返回以下结果:
    1. { "passing_scores": 4 }

    参考

    https://docs.mongodb.com/manual/reference/operator/aggregation/count