MongoDB学习总结二

MongoDB的一些操作:

创建数据库:

use test

注意此时数据库并没有创建,只是在mongo的预处理缓存中存在,只有为mongo加入相应的list,才真正创建。如果什么都不干就离开的话,这个空数据库就会被删除。

 

show dbs  查看所有的集合

show collections    查看集合中所有的文档

db.help()   查看帮助

db.students.help()   查看集合的帮助

db.system.indexes.find()   查看索引

db.students.drop()   删除文档中的数据

 

插入数据:

db.[documentName].insert()

例如:

db.persons.insert({name:"zhangsan"}),该操作会自动增加一个_id键。

 

save操作和insert操作的区别:

当遇到_id相同的情况,save会保存操作,insert则会报错。

批量插入:

for(var int i=0; i<10; i++){

           db.person.insert({name:i});

    }

每次插入的文档不能超过4M,使用Object.bsonsize(doc)可以查看doc文档转换为bson的大小。

 

删除文档:

db.[documentName].remove()

db.user.remove()    //该操作会删除user集合中的所有文档,但不会删除user集合,原始的索引也将会保留。

根据条件进行删除:

db.persons.remove({_id:1})

如果要删除一个数据量十分庞大的集合,直接删除该集合比直接用remove的效率高很多。

 

更新文档:

更新操作是原子的,若两个更新同时发生,先到达服务器的先执行。

db.[documentName].update({查询器},{修改器})

//主键冲突的时候会报错并停止更新。

insertOrUpdate操作:

db.[documentName].update({查询器},{修改器},true)

批量更新:

db.user.update({name:"zhangsan"},{$set:{name:"lisi"}},false,true)

将name为zhangsan的数据批量更新name为lisi

如果有多个文档符合查询器的条件,妖精这些匹配的文档全部更新,则将update的第四个参数设置为true

执行getLastError命令可以查看到底更新了多少文档:

db.runCommand({getLastError:1})

 

使用修改器来完成局部更新操作:

修改器:

$set:用来指定一个键值对,如果键存在就进行修改,不存在则添加。

db.person.update({"name":"xiaoming"},{$set:{"book":"java"}})

$set修改内嵌文档:

db.person.update({"author.name":"john"},{$set:{"authoe.name":"lily"}})//author为person的内嵌文档

 

$inc:只适用于数字类型,为指定的键对应的数字类型的值进行加减操作。

$uset:删除指定的键

db.person.update({"name":"xiaoming"},{$set:{"book":1}})

 

数组修改器:

$push:

(1)如果指定的键是数组,则追加的数值

(2)如果指定的键不是数组,则中断当前操作。

(3)如果指定的键是数组但是指定的键不存在,则创建数组类型的键值对

db.user.update({"name":"zhangsan"},{$push:{"books":{"java":"java7","nosql":"mongodb"}}})

 

$pushAll:可以批量添加数组,用法同$push

 

$ne:判断键所指定的值是否等于$ne的值

db.user.update({"name":{"$ne":"lucy"}},{$push:{"books":{"java":"java7","nosql":"mongodb"}}})

 

$addToSet:目标数组存在此项则不错操作,不存在则加进去

$addToSet和$each结合起来添加多个不同的值:

db.user.update({"_id":"123"},{"$addToSet":{"emails":{"$each":["[email protected]","[email protected]"]}}})

$each会循环遍历后面的数组,把每一个数值进行addToSet操作

 

$pop:从指定数组删除一个值,1表示删除最后一个数值,-1表示删除第一个数值。(这相当于把数组看成是队列或者栈)

{$pop:{"key":1}}//从末尾删除一个元素

{$pop:{"key":-1}}//从头部删除一个元素

 

$pull:删除一个被指定的数值

db.user.update({"_id":"1234"},{$pull:{"name":"john"}})

$pullAll:一次性删除多个指定的值

 

数组定位修改器

$ :数组定位器,如果数组有多个数值,我们只想对其中的一部分进行操作,$用来定位查询文档已经匹配的元素。

db.blog.update({"comments":"john"},{"$set":{"comments.$.author":"jim"}})

 

注意:当doucument被创建时,DB会为其分配内存和预留内存,当修改操作不超过预留内存时,修改的速度是很快的,但是当超过了预留内存时就要重新分配预留内存,则会消耗时间。所以,在进行push等操作时一定要注意,push的内容不要过多,如果push成为了瓶颈,可以将内嵌数组独立出来放到一个单独的集合中。

 

upsert操作

如果没有文档符合更新条件,就以这个条件和更新文档为基础创建一个文档;如果找到了匹配条件的文档,则正常更新。

db.persons.update({"count":25},{$inc:{"count":3}},true)

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自350083890.iteye.com/blog/2274297
今日推荐