MongoDB——聚合管道之$match和$count操作
Posted 小志的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB——聚合管道之$match和$count操作相关的知识,希望对你有一定的参考价值。
目录
一、聚合管道之$match的概述
- $ match用于对文档进行筛选,之后可以在得到的文档子集上做聚合,$ match可以使用除了地理空间之外的所有常规查询操作符,在实际应用中尽可能将$ match放在管道的前面位置。这样有两个好处:一是可以快速将不需要的文档过滤掉,以减少管道的工作量;二是如果再投射和分组之前执行$match,查询可以使用索引。
- 筛选管道操作和其他管道操作配合时候时,尽量放到开始阶段,这样可以减少后续管道操作符要操作的文档数,提升效率。
二、聚合管道之$count的概述
- 计数并返回与查询匹配的结果数。
三、数据准备
-
准备数据集,执行脚本
var tags = ["nosql","mongodb","document","developer","popular"]; var types = ["technology","sociality","travel","novel","literature"]; var books=[]; for(var i=0;i<50;i++) var typeIdx = Math.floor(Math.random()*types.length); var tagIdx = Math.floor(Math.random()*tags.length); var tagIdx2 = Math.floor(Math.random()*tags.length); var favCount = Math.floor(Math.random()*100); var username = "xx00"+Math.floor(Math.random()*10); var age = 20 + Math.floor(Math.random()*15); var book = title: "book-"+i, type: types[typeIdx], tag: [tags[tagIdx],tags[tagIdx2]], favCount: favCount, author: name:username,age:age ; books.push(book) db.books1.insertMany(books);
四、聚合管道之$match操作示例
-
查询books1集合中的数据
> db.books1.find()
-
查询books1集合中type字段为technology的所有数据
db.books1.aggregate([$match:type:"technology"])
五、聚合管道之$count的示例
-
查询books1集合中的数据
> db.books1.find()
-
计数并返回与查询匹配的结果数
(1)、$ match阶段筛选出type匹配technology的文档,并传到下一阶段;
(2)、$ count阶段返回聚合管道中剩余文档的计数,并将该值分配给type_countdb.books1.aggregate([ $match:type:"technology", $count: "type_count" ])
以上是关于MongoDB——聚合管道之$match和$count操作的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB $geoNear 聚合管道(使用查询选项和使用 $match 管道操作)给出不同的结果
Mongodb 聚合管道优化 - $match 的 2 阶段