乐趣区

关于前端:MongoDB随手笔记二

一. 文档的嵌套增加

当初给数据库中 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 之前执行

退出移动版