插入
默认不检查文档有效性(是否超长4M,是否有未定义类型,是否包含非UTF8字符),只是简单的原样存入数据库。坏处是运行插入无效数据,好处是避免注入式攻击。
使用–objcheck参数启动数据库,服务器插入前先检查文档结构的有效性
db.test.insert({"bar":"baz"})
批量插入
批量插入参数是文档构成的数组。还可以使用mongoimport工具导入数据
删除
db.test.remove() //全删除文档,保留集合
db.test.remove({"opt-out":true})//条件删除
删除整个集合
db.drop_collection("test")//删除集合包括索引
更新
更新是原子操作,若两个更新同时产生先到先执行,最后的更新有效。
两者方式:文档替换,修改器
文档替换
文档注意如果检索条件匹配到多个文档,更新失败。最好使用id作为检索条件
var joe = db.users.findone({"name":"joe"});
joe.username = joe.name;
delete joe.name;
delete joe.age;
//db.users.update({"name" :"joe"},joe);
db.user.update({"_id":joe._id},joe);
修改器
$开头。快速更新部分文档。更新修改器是种特殊的键,用与指定复杂的更新,比如调整,增加或者删除键
1.set修改器
增加,删除键,修改键的数据类型,修改键值
db.users.update({"username" : "joe"},
{“$set”:{"favorite book":"war and peace"}})//更新内容,或增加键“favorite book”
db.users.update({"username" : "joe"},
{“$unset”:{"favorite book":l}})//删除键
db.users.update({"username" : "joe"},
{"$set":{"name.firstname":"joe"}})//更新内部文档
2.++ –修改器
$inc 修改数字类型的值增加或减少
db.games.update({"game":"pinball", "user":"joe"},{"$inc":{"score":50}})//score+50
db.games.update({"game":"pinball", "user":"joe"},{"$inc":{"score":-50}})//score-50
3.数组修改器
值为数组的键push在数组尾部增加一个元素addToSet 如果没有增加一个或多个元素
pop从头部或尾部删除一个元素pull 将符合的元素全部删除
4.数组定位修改器
定位操作符$,无法确定修改数组的第几个元素的时候使用。比如修改joe的comment从多个comments中,由于无法知道joe的comment在comments数组中的位置,可以使用
db.blog.update({"comments.author":"joe"},{"$set":{"comments.$.comment":"good"}})//将joe的comment修改为“good”。
//匹配多个时只修改第一个
upsert
update的第三个参数,默认false。true打开upsert.如果没有文档符合更新,就创建一个新文档