一.文档的嵌套增加

当初给数据库中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$addToSetpush的区别就是会查问是否反复,如果反复则无事产生。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之前执行