1 插入并保存文档
1 | >db.foo.insert({"bar":"baz"}); // 插入一条文档,会自动添加"_id"键 |
1.1 批量插入
☑ 优点:和多次插入一个文档相比可以减少 TCP 的开销
☑ 限制:最大时 16M (2010年)
☑ 特点:只能插入多个文档到一个集合,不能将一个文档插入到多个集合
☑ 用途:导入数据前,对数据做一些小的修正(转换日期类型或添加自定义的”_id”)
☑ 注意:导入原始数据可以使用命令行工具,如 mongoimport,而不是使用批量插入
1.2 插入:原理和作用
过程
使用的驱动程序将数据转换成BSON
数据库解析 BSON, 检验是否包含 “_id” 键并且文旦不超过 4MB
将文档原样存入数据库
☑ 限制:大于4MB的文档不嫩个存入数据库
☑ 优点:不做更多的校验,因此性能更好;插入时不执行代码,远离注入攻击。
☑ 缺点:允许插入无效数据
细节--objcheck
选项:服务器在插入之前检查文档结构的有效性Object.bsonsize(doc)
:在shell中运行,查看doc文档转为 BSON 时的大小
2 删除文档
1 | >db.users.remove() // 删除users集合中的所有文档,不会删除集合本身和索引,删除集合(然后重建索引)会根块 |
删除速度比较
(一)先插入一百万个虚拟元素
1 | for i in range(1000000): |
(二)删除
第一种:删除所有文档
1 | import time |
第二种:删除集合
1 | db.drop_collection("bar") // 只花了0.1秒 |
3 更新文档
db.docName.update
用途
☑ 查询文档:找出要更新的文档
☑ 修改器:描述对文档做出哪些更改
特点:原子的,先到达服务器的先执行
3.1 文档替换
☑ 注意:常见错误就是查询条件匹配了多个文档,同事修改器中指定了_id的值,数据库会因为_id重复拒绝修改
案例
修改前
1 | { |
修改后
1 | { |
实现
第一步:创建修改器
1 | >var joe = db.users.findOne("name":"joe") |
第二步:修改
1 | >db.users.update({"name":"joe", joe}) |
3.2 使用修改器
☑ 更新修改器:一种特殊的键,用来指定复杂的更新操作,比如调整、增加或者删除键
☑ 限制:不能修改_id值
☑ 注意:MongoDB 一开始设计成 JS 数据库,因为 $ 在 JS 中没有特殊含义(历史遗留问题),然而 $ 在 PHP 和 Perl 中有特殊含义
案例:在一个集合中放置用户登录网站的次数信息
修改对象
1 | { |
使用修改器
1 | >db.analytics.update({"url":"www.example.com"}, {"$inc":{"pageviews":1}} ) // 创建修改器,该修改器用来使analitics集合中的文档,使得被访问时pageviews每次增加一 |
1.”$set”修改起入门