MongoDB 学习三(数据库的增删改查)
接昨天的内容学习,首先做一个回顾:
开始今天的内容:
1、删除文档数据
昨天说过删除文档的方法,今天补充几点:
db.persons.remove({name:"fanhu"}) //删除当前数据文档中包含这条内容的数据,_id 一块被删除。db.persons.remove() //删除persons下的所有数据,_id 是保存下来的,只是数据没有了。
tips:如果要删除的集合数据量很大,直接删除该集合(见下一条)并重新建立索引的方法比直接使用 remove 效率高很多。
2、删除库中的集合(这里把persons这个数据文档删除掉)
db.persons.drop()再来查看
show collections --->这时候foobar这个数据库中已经没有persons这个数据文档了,当该数据库中的数据文档都被删除后foobar这个数据库也会被自动删除
3、删除数据库
db.dropDatabase()4、数据库级别的help (要学会查看帮助和官方文档)
show dbs //查看所有数据库
上面我们把foobar这个数据库删除掉了,这里再重新创建一次,就当复习了。
创建完成后,这里直接使用 db.help() 会列出一堆方法,后面再详细的去学。
db.stats() ----> //得到当前数据库的状态 不要写错了,不是status啊。
5、数据文档集合的help
db.persons.help() ---> 同样会列出一堆方法。
6、数据库和集合的命名规范
①:不能是空字符串 ②:不能含有 引号、逗号、空格、斜杠以及各种奇怪字符,总之作为一名程序员,我相信你懂得。这个短横线是可以使用的,但是最好别用,容易被当成减号处理,需要设置之后再用,所以没必要给自己添麻烦。 ③:全部小写,并且不能和系统保留库同名,如admin、local、config ④:最多64个字节
7、可以使用内嵌文档并且支持数组
db.persons.insert({age:"27",study:{year:2016,month:12}})
8、批量插入文档
使用shell的for循环9、save操作
save和insert的区别就在于当遇到 _id 相同的情况,前面说过,每条数据都会自动生成一个 _id 来作为唯一标识。我们现在插入一条数据:db.psersons.insert({_id:0001},{name:"fanhu"})
然后再来插入一条数据:db.persons.insert({_id:0001},{name:"huzi"})
因为两条数据的 _id 相同,然后就报错了。
如果我们使用save就不会出现这种情况,当遇到 _id 相同的情况,会当做更新来处理。
10、更新文档
昨天讲了db.persons.update(),再来做个例子:
再添加上一条数据的,结果被直接替换为{ "_id" : ObjectId("5864e6819a74ca578c124615"), "age" : 27 },因此这种方法也叫做强制替换。
②:我们上面说过 update() 有两个参数,第一个查询器,第二个是修改器,如果原来文档中有一条数据,而我想跟新之后的效果是,原来有的数据就进行更新操作,没有的数据就进行插入操作,这时候要用到第三个参数 ,true或false,也就是update(查询器,修改器,true)。
③:还有昨天说过的使用 $set 修改器 能够实现同样的效果。
下面再说几个修改器:
④: $inc 修改器:自动的增加或减小一个数,直接上例子:
⑤:$unset修改器:删除数据文档中的一个键。
此时第二条数据中已经没有了 height 这一条。
⑥:$push修改器:如果指定的键是数组,则追加新的数组。如果指定的键不是数组,则中断当前的操作。如果不存在指定的键,则创建数组类型的键值对。 看例子:
⑦:$pushAll修改器:批量追加
语法: db.persons.update({name:"fanhu"},{$pushAll{ 要追加到的数组名 : [ 这里是要追加的数组 ]}})
⑧:$addToSet 修改器:目标数组存在该项内容则不进行操作,不存在就追加进去
语法: db.persons.update({name:"fanhu"},{$addToSet:{ 目标数据:要追加的内容}})
可以看到我们第一次并没有执行修改,第二次进行了追加。
⑨:$pull 修改器:删除数组中的某一项
语法:db.persons.update({name:"fanhu"},{$pull:{要从哪个数组中删除 : "要删除的项"}})
此时数组books中已经没有js11111这一项。
⑩:$pullAll 修改器:批量删除数组中的项
语法:db.persons.update({name:"fanhu"},{$pullAll:{ 要从哪个数组中删除 : ["要删除的项1","要删除的项2"]}})
11、批量更新
上面说到了update的三个参数,这里要用到第四个参数,也是true或false。
tips:如果要使用第四个参数进行批量跟新,得配合$set这个修改器进行操作,直接上例子:
少年的范儿: 紧急关头,来个收费,哎,真是要命
qq_21040147: 一样。能不能发一下
黑色GGBoy: "change:trackData" , "trackData" 一个view内置组件,怎么会有这两个什么鬼的属性
怪哈哈: touch.wxs能否发一下啊
怪哈哈: 大哥,这部分的整体代码可以给一下吗,能不能加个微信啊,遇到类似问题了,求求了