插入
db.foo.insert({"bar": "baz"})
插入校验
理解:
* 数据能够解析成BSON形式
* 拥有_id字段
* 文档不能超过4MB
批量插入
理解:批量插入能传递一个由文档组成的数组给数据库
删除
db.users.remove({})
理解:
* 接受一个查询文档,所有能够被该查询出的文档都会被删除
* remove不会删除索引
删除速度
理解:如果想要删除集合中的所有文档和索引,应该直接删除集合,这样速度更快
更新
理解:
* 第一个参数负责找到需要修改的文档,
* 第二个参数负责修改的文档
* 第三个参数没有找到文档时,是否创建一个文档
* 第四个参数指定是否全部修改
* 原子性,两个更新同时发生,先到达数据库的先执行
操作方式
理解:
* 替换,用一个完成的文档,替换掉原先的文档
* 部分修改;update({}, {})
- 修改一个键的值,如果不存在就创建;$set;P28
- 删除一个键;$unset;P29
- 增加或者减少一个数的值,如果不存在就创建;$inc;P30
- 数组修改;P31
- 数组末尾添加数据,如果不存在就创建;$push
- 数组末尾添加数据,如果不存在就创建,但如果已经存在,则不重复添加;$addToSet
- 批量添加数据,与push和addToSet配合使用;$each
- 从尾部或头部删除一个数据;$pop
- 删除数组中的指定数据,相同的数据也会删除;$pull
- 修改指定位置数据;P34
- 没有找到需要修改的文档,就创建一个新的文档;P36;update({}, {}, true)
- 更新多个文档;P38;update({}, {}, true, true)
- shell中快速修改文档;save;P37
- 当更新或删除操作的查询用到排序时,为了避免同时错误,应该是findAndModify合并操作;P38
修改速度 P35
理解:
* 如果操作不影响文档大小,速度会很快
* 大小发生改变时,需要分配空间,因此速度会变慢
* 当数组需要频繁添加数据时,可以考虑将内嵌数组
替换
查阅:
db.nums.update({num: 1}, {num: 111})
注意:
{"_id": 1, "name": "joe", "age": 20}
{"_id": 2, "name": "joe", "age": 30}
// 执行下面的操作, 本想修改第二个文档,但是却修改了第一个文档
db.people.update({"name": "joe"}, {"_id": 2, "name": "joe", "age": 31})
注:页面代表,在MongoDB权威指南第一版中的页数