一. 文档的嵌套增加
当初给数据库中 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 之前执行