一、前言
- monogodb的语法完全遵循js语法,可以以面向对象的方式来操作数据库,所以数据的增删改查都变的极为便利和简单。
- 通过在其js环境中的db对象,可以完成所有的基本操作
二、增(insert)
- MongoDB执行插入操作时,会将js对象转换为BSON,并对BSON进行解析,检查其是否有_id字段,另外会检查文档大小,1.8之前版本,单文档不能超过4MB,1.8之后版本,单文档不能超过16MB。
- 采用 mongod --objcheck 方式启动mongodb时,数据库会对文档进行对象结构检查,否则不检查以提高效率
- mongodb在执行插入操作时,不执行任何代码,所以传统的注入式攻击对mongodb无效
1> 简单插入,可以采用标准的js语法进行插入操作
db.collection.insert({key:value});
obj={key:value};
db.collection.insert(obj);
2> 批量插入及导入
- 可以使用批量插入,将多个文档以数组的形式使用一个TCP请求一次插入,以提高效率,节省带宽
- 命令行中提供mongoimport工具,实现导入功能。但是如果需要对数据进行简单操作,例如日期的格式转换,或者添加_id字段,需要采用批量插入的方式
三、删(remove)
1> 带参数的remove, 会删除所有与参数匹配的文档
db.collection.remove({key:value});
2> 不带参数的remove, 会清空当前集合
db.collection.remove()
3> drop,可以移除当前集合,效率比remove高三到四个数量级
db.collection.drop();
四、改(update)
- 对文档数据的更新使用update函数。
- 第一个参数为匹配条件,是一个对象
- 第二个参数为修改内容,是一个含有修改器的对象
- update操作仅修改第一个匹配的元素,不会修改所有匹配的元素
- 修改操作为原子性操作
- 两个更新同时发生时,先到的先执行,串行执行,不会出现脏修改的情况
1> 文档的完整替换
obj=db.collection.findOne({"key":"value"});
obj.key=name1;
obj.newKey={"key":"value"};
db.collection.update({"key":"value"},obj);
2> $set修改器,可以修改某个字段,如果不存在的话则添加
db.collection.update({"key":"value"},{"$set":{"address":{"city":"beijing"}}})
3> $unset,可以移除某个字段
db.collection.update({"key":"value"},{"$unset":{"address":1}})
4> $inc修改器,可以对一个数字字段进行加减操作
db.collection.update({"key":"value"},{"$inc":{"keyName":5}});
5> 数组修改器
- $push,其中被操作的字段arrKey必须为数组类型,如果不存在,则创建后添加
db.collection.update({"key":"value"},{"$push":{"arrKey":"newValue"}};
- $ne,用于update的条件参数,判断某个数组字段是否含有限定值. 如果不存在则添加
db.collection.update({"arrKey":{"$ne":"arrValue1"}},{"$push":{"arrKey":"arrValue"}})
- $addToSet, 将数组当作set来操作
db.collection.update({"key":"value"},{"$addToSet":{"arrKey":"newValue"}});
- $each,一次添加多个新值
db.collection.update({"key":"value"},{"$addToSet":{"$each":{"arrKey":["newValue1","newValue2","newValue3"]}}});
- $pop,从数组的任意一端删除一个元素
db.collection.update({"key":"value"},{"$pop":{"arrKey":1}})//从数组末尾删去一个元素
db.collection.update({"key":"value"},{"$pop":{"arrKey":-1}})//从数组头部删去一个元素
- $pull, 从数组中删去所有匹配的值
db.collection.update({"key":"value"},{"$pull":{"arrKey":"arrValue"}})
- 数组定位修改器
db.collection.update({"key":"value"},{"$set":{"arrKey.0","newArrValue"}});
db.collection.update({"arrKey.eleKey","value"},{"$set":{"arrKey.$.eleKey1":"newValue"}})// $符表示查询到的数组文档元素脚标
6> upsert: update的第三个参数为upsert开关
- 如果没有文档符合查询条件,就会以这个条件和更新文档为基础创建一个新的文档。如果找到匹配文档,则进行更新。
db.collection.update({"key":"value"},{"$inc":{"newKey":3}},true);//第三个参数设为true
7> save: shell中的单参数简单更新
- 只有一个参数,如果参数文档已经存在,则更新这个文档,如果这个文档不存在,则insert这个文档
db.collection.save({"_id":ObjectId("111111111111"),"key":"value"});// 这里如果使用insert,如果集合已经存在这个文档,则会报错
8> update的第四个参数为多文档操作开关
- 默认情况下,update仅对匹配的第一个文档进行操作,如果需要对所有匹配的文档进行操作,则可以给四个参数设置为true
db.collection.save({"key":"value"},{"修改器":{"keyName":"newValue"}},false,true);
本文介绍了mongodb中间对于数据库的更改操作:添加、更新、删除。
本文深入讲解MongoDB数据库的增删改查操作,包括插入、删除、更新文档的方法,以及使用各种修改器进行复杂数据操作的技巧。
2050

被折叠的 条评论
为什么被折叠?



