MongoDB(二)语法(增删改)

本文深入讲解MongoDB数据库的增删改查操作,包括插入、删除、更新文档的方法,以及使用各种修改器进行复杂数据操作的技巧。

一、前言

  • 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中间对于数据库的更改操作:添加、更新、删除。

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值