MongoDB 数据操作与查询全解析
1. 数据更新相关操作
1.1 磁盘碎片处理
在查询时,如果 MongoDB 遍历了整个范围却未找到任何文档,这意味着存在磁盘碎片,可考虑进行压缩操作。若模式需要大量移动或频繁插入、删除操作,可使用 usePowerOf2Sizes
选项提高磁盘重用率,通过 collMod
命令设置:
db.runCommand({"collMod": collectionName, "usePowerOf2Sizes": true})
后续集合的分配将采用 2 的幂次方大小的块。不过,此选项仅适用于高变动的集合,因为它会降低初始空间分配效率。若在仅插入或原地更新的集合上设置,会使写入变慢。将 "usePowerOf2Sizes"
设置为 false
可关闭特殊分配,该选项仅影响新分配的记录,对现有集合运行或切换该值无害。
1.2 插入更新(Upsert)
Upsert 是一种特殊的更新操作。若未找到符合更新条件的文档,会通过合并条件和更新文档创建新文档;若找到匹配文档,则正常更新。以记录网站页面浏览量为例,不使用 Upsert 时,JavaScript 代码如下:
// check if we have an entry for this page
blog = db.analytics.find