一.文档的嵌套增加
当初给数据库中age:“2”
的文档对象增加一个属性,叫喜好(hobby),hobby里又分成 游戏(game),静止(sport),静止和游戏中又包含了英雄联盟,篮球之类的选项。首先这必定牵扯的是增加这个属性,毋庸置疑抉择db.grade.update
。
tips: 在终端里没有谬误提醒,须要特地留神一下花括号的地位和数量,你敲下{
前括号的时候,终端并不会给你补齐}
后花括号.
二.嵌套文档的查询方法
也就是说当初你只晓得有个用户的喜好hobby是喜爱静止(hobby.sport:"run")
那么find办法如何去查问嵌套文档?
兴许你会这样写:db.grade.find({hobby.sport:"run"})
后果是报错了此时须要留神,咱们须要在hobby.sport
外加上一个引号。
三.查问的一些额定办法 (不仅仅是这些)
这些id是否太长了,我查问的时候不须要它显示进去。find()能够接管两个参数.
你没有什么非凡的查问条件的话,第一个参数设置为空对象,第二个参数设置你不想查问的属性为0.同理,如果你想看到某个属性的话,设置为1即可,默认find()第二个参数全为1。
四.嵌套文档属性的增加
当初有一个需要,我想在sport里增加一个ball。到这里,我第一步马上会想到update
而后敲下如下的命令
留神. 你能想到这里,阐明你后面的办法把握的不错,然而让咱们持续钻研一下这行代码。
首先set是用来批改文档属性的值的,你这样做是吧[“run”]
这个数组批改为了一个字符串"ball"
这样是会引起很大的谬误。
ok剖析问题,sport的属性是一个数组,快想一想,JS代码,数组,JS代码,数组?往数组里增加那不就是push
吗?是的,这时候咱们只须要更换一下修饰符即可 $set
批改为$push
。后果如下。绝对应的删除最初一个值是$pop
push
办法有一个弊病,它不会思考你的数组中是否曾经存在这个值,
能够看到下面sport里有两个ball,那么如何防止呢?就须要用到$addToSet
,$addToSet
和push
的区别就是会查问是否反复,如果反复则无事产生。d
让咱们先简略删除一下最初一个"ball",在这里要明确,我要删除了,那么这个属性的值对我来说曾经无关紧要了,间接删除对应的属性即可。删除我就只须要数组的索引就好,对于pop
来说,是数组的最初开始计数,1就是最初一个,相同-1就是索引为0的数组第一个元素。
接下来持续增加一个ball
你会看到匹配到了一个文档,然而并没有批改。这里特地提醒一下即使是age的值是数字,双引号也不能够省略。
五.条件查问
1.大于小于等于
2.想要查问大于100,或者
大于200的数字
须要用到$or
查问符db.number.find($or[{number:{$lt:"100"},{number:{$gt:"200"}}}])
3.仅仅只想显示所有文档的name
属性,通过给find第二个参数来限度,_id默认状况会始终显示。
4.升序或者降序sort()
这个须要用到sort办法,应用场景很多,比方价格的排序或者销量的排序。db.people.find({}).sort({salary:1})
示意依照工资升序排列
演示一下以age从小到大或者从大到小排列1示意从小到大,也就是升序,-1相同
须要留神的是,如果某些文档没有该属性,那么默认值为0,也会参加升降排序
<sort limit skip
>在代码书写时先后顺序是无所谓的,都会先sort,skip,而后limit
六.网页页数的实现原理
如果想查询数据库前10条数据,db.collection.find().limit(10)
limit是限度的意思。
如果想跳过前五条数据,那么就要执行db.collection.find().skip(5).limit()
网页页数的实现成果
这里不须要辨别skip办法,和limit办法
的程序mongoDB会主动让skip在limit之前执行