MongoDB 精粹

2019-12-23  本文已影响0人  Robin92

来自阅读 《MongoDB 权威指南(第二版)》1~8章的整理。

写在前面的话

此文章可能不适合没有基础的读者。此书写作时对应的版本应当很低,所以文章中所示可能会和当下使用的方法有出入,但 MongoDB 所拥有的功能差不多类似,请读者注意。

第一章

(无)

第二章 基础知识

文档
集合
数据库
启动 MongoDB
数据类型
MongoDB Shell
MongoDB Shell 执行脚本

第三章 CRUD 命令

插入-批量插入 batchInsert
删除
更新
写入安全(Write Concern)机制

第四章 查询

书中说一个集合中存在 {x: 15}{x: [15, 25]} 两个文档,若要精确查到 {x: 5} 可以在 x 字段上创建索引,然后用 cursor.min({x: 10}).max({x: 20}) 来做。
min()max() 可以将限制查询条件遍历的索引。但注意,这个 min/max 的使用必须指明索引的所有字段。

游标
高级查询
数据库命令

第五章 索引

简介
复合索引
// [age, username] -> 对应地址
[0, "user100309"] -> 0x0c965148
[0, "user100334"] -> 0xf51f818e
[0, "user100479"] -> 0x00fd7934
...
[0, "user99985" ] -> 0xd246648f
[1, "user100156"] -> 0xf78d5bdd
[1, "user100187"] -> 0x68ab28bd
[1, "user100192"] -> 0x5c7fb621
...
[1, "user999920"] -> 0x67ded4b7
[2, "user100141"] -> 0x3996dd46
[2, "user100149"] -> 0xfce68412
[2, "user100223"] -> 0x91106e23
...
$ 查询符与索引效率
范围查询与索引
OR 操作
索引嵌套文档
多键索引
索引数组
索引基数
使用 explain 和 hint
// cursor.explain()
{
    "cursor" : "BtreeCursor age_1_username_1", // 游标类型以及索引名称
    "isMultiKey" : false, // 是否为多键索引
    "n" : 83484, // 匹配的文档数目
    "nscannedObjects" : 83484, // 索引指针去磁盘上查找实际文档的次数
    "nscanned" : 83484, // 文档查询次数
    "nscannedObjectsAllPlans" : 83484,
    "nscannedAllPlans" : 83484,
    "scanAndOrder" : true, // 是否在内存中进行排序了
    "indexOnly" : false, // 是否只使用索引就能完成此查询
    "nYields" : 0, // 查询暂停的次数,(为了让写入顺利执行,如果有写入请求需要处理,查询会周期性地释放他们的锁)
    "nChunkSkips" : 0,
    "millis" : 2766, // 耗时 ms 
    "indexBounds" : { // 索引的使用情况,索引的遍历范围
        "age" : [
            [
                21,
                30
            ]
        ],
        "username" : [
            [
                {
                    "$minElement" : 1 // 负无穷
                },
                {
                    "$maxElement" : 1 // 正无穷
                }
            ]
        ]
    },
    "server" : "spock:27017"
}
查询优化器

第六章

何时不应该用索引
索引类型
索引管理
上一篇 下一篇

猜你喜欢

热点阅读