MongoDB索引笔记

在 MongoDB 查询过程中,索引(Index) 起到非常重要的作用,如果没有索引,MongoDB将会执行全表扫描 。当然如果数据量比较少全表扫描的开销并不大,但如果集合文档数量到百万、千万甚至上亿的时候,一个查询耗费数十秒甚至几分钟都有可能,代价非常高昂。

阅读更多

MongoDB-aggregate用法

MongoDB 中聚合(aggregate)方法可以对集合中的文档进行变换和组合,主要用于处理数据。语法:

1
db.collection.aggregate(pipeline, options);

管道操作符

MongoDB 的聚合管道将 MongoDB 文档在一个管道处理完毕后将结果传递给下一个管道处理,管道操纵是可以重复的。

管道聚合阶段:

1
2
3
4
5
6
7
$project:包含、排除、重命名和显示字段
$match:查询,需要同find()一样的参数
$limit:限制结果数量
$skip:忽略结果的数量
$sort:按照给定的字段排序结果
$group:按照给定表达式组合结果
$unwind:分割嵌入数组到自己顶层文件<br>

group 查询操作符:

1
2
3
4
5
6
7
8
$sum 总结从集合中的所有文件所定义的值.
$avg 从所有文档集合中所有给定值计算的平均.
$min 获取集合中的所有文件中的相应值最小.
$max 获取集合中的所有文件中的相应值的最大.
$push 值插入到一个数组生成文档中.
$addToSet 值插入到一个数组中所得到的文档,但不会创建重复.
$first 根据分组从源文档中获取的第一个文档。通常情况下,这才有意义,连同以前的一些应用 “$sort”-stage.
$last 根据分组从源文档中获取最后的文档。通常,这才有意义,连同以前的一些应用 “$sort”-stage.

附加选项

  • explain:布尔值,指定返回结果是否显示该操作的执行计划
  • allowDiskUse:布尔值,指定该聚合操作是否使用磁盘。
    每个阶段管道限制为 100MB 的内存。如果一个节点管道超过这个极限,MongoDB 将产生一个错误。为了能够在处理大型数据集,可以设置 allowDiskUse 为 true 来在聚合管道节点把数据写入临时文件。这样就可以解决 100MB 的内存的限制。
  • cursor
  • maxTimeMS
  • bypassDocumentValidation
  • readConcern
  • collation

参考文档

https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/#db.collection.aggregate
http://www.mongodb.org.cn/tutorial/19.html

MongoDB固定集合

MongoDB 固定集合(Capped Collections)是性能出色且有着固定大小的集合,大小固定,有点类似数据结构中的循坏队列,先进先出方式。满队列删除原来的元素!

阅读更多