MongoDB随手笔记(二)

一.文档的嵌套添加

image.png

现在给数据库中age:“2”的文档对象添加一个属性,叫爱好(hobby),hobby里又分成 游戏(game),运动(sport),运动和游戏中又包括了英雄联盟,篮球之类的选项。首先这肯定牵扯的是添加这个属性,毋庸置疑选择db.grade.update

image.png

tips: 在终端里没有错误提示,需要特别注意一下花括号的位置和数量,你敲下{前括号的时候,终端并不会给你补齐}后花括号.

二.嵌套文档的查询方法

也就是说现在你只知道有个用户的爱好hobby是喜欢运动(hobby.sport:"run")那么find方法如何去查询嵌套文档?

也许你会这样写:db.grade.find({hobby.sport:“run”})

image.png

结果是报错了此时需要注意,我们需要在hobby.sport外加上一个引号。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-86K8gVSC-1649730140418)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/90e4c8d69d73494b90fab6b7bf26cb4c~tplv-k3u1fbpfcp-watermark.image?)]

三.查询的一些额外方法 (不仅仅是这些)

image.png

这些id是否太长了,我查询的时候不需要它显示出来。find()可以接收两个参数.
你没有什么特殊的查询条件的话,第一个参数设置为空对象,第二个参数设置你不想查询的属性为0.同理,如果你想看到某个属性的话,设置为1即可,默认find()第二个参数全为1。

image.png

四.嵌套文档属性的添加

image.png

现在有一个需求,我想在sport里添加一个ball。到这里,我第一步马上会想到update
然后敲下如下的命令

image.png

注意. 你能想到这里,说明你前面的方法掌握的不错,但是让我们继续研究一下这行代码。
首先set是用来修改文档属性的值的,你这样做是吧[“run”]这个数组修改为了一个字符串"ball"这样是会引起很大的错误。

ok分析问题,sport的属性是一个数组,快想一想,JS代码,数组,JS代码,数组?往数组里添加那不就是push吗?是的,这时候我们只需要更换一下修饰符即可 $set修改为$push。结果如下。相对应的删除最后一个值是$pop

image.png

push方法有一个弊端,它不会考虑你的数组中是否已经存在这个值,

image.png

可以看到上面sport里有两个ball,那么如何避免呢?就需要用到$addToSet$addToSetpush的区别就是会查询是否重复,如果重复则无事发生。d

让我们先简单删除一下最后一个"ball",在这里要明白,我要删除了,那么这个属性的值对我来说已经无关紧要了,直接删除对应的属性即可。删除我就只需要数组的索引就好,对于pop来说,是数组的最后开始计数,1就是最后一个,相反-1就是索引为0的数组第一个元素。

image.png

接下来继续添加一个ball

image.png

你会看到匹配到了一个文档,但是并没有修改。这里特别提示一下即便是age的值是数字,双引号也不可以省略。

五.条件查询

1.大于小于等于 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6lPjxCh-1649730140421)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bf0bfd02e33a41feb4260063c56630a3~tplv-k3u1fbpfcp-watermark.image?)]

2.想要查询大于100,或者大于200的数字
需要用到$or查询符

db.number.find($or[{number:{$lt:"100"},{number:{$gt:"200"}}}])

3.仅仅只想显示所有文档的name属性,通过给find第二个参数来限制,_id默认情况会一直显示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XeNkB0J5-1649730140421)(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4abf7d26c6fc4a6ea49021e8e5e97060~tplv-k3u1fbpfcp-watermark.image?)]

4.升序或者降序sort()

这个需要用到sort方法,使用场景很多,比如价格的排序或者销量的排序。
db.people.find({}).sort({salary:1})表示按照工资升序排列

演示一下以age从小到大或者从大到小排列1表示从小到大,也就是升序,-1相反
需要注意的是,如果某些文档没有该属性,那么默认值为0,也会参与升降排序
image.png

<sort limit skip >在代码书写时先后顺序是无所谓的,都会先sort,skip,然后limit

六.网页页数的实现原理

如果想查询数据库前10条数据,db.collection.find().limit(10)limit是限制的意思。

如果想跳过前五条数据,那么就要执行db.collection.find().skip(5).limit()


网页页数的实现效果

image.png

这里不需要区分skip方法,和limit方法的顺序mongoDB会自动让skip在limit之前执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值