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)