MongoDB随手笔记(二)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 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外加上一个引号。

image.png

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


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.大于小于等于 

image.png

2.想要查询大于100,或者大于200的数字

需要用到$or查询符

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

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

image.png

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之前执行


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
10月前
|
存储 NoSQL 关系型数据库
【MongoDB系列笔记】索引
索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
72 1
|
10月前
|
存储 JSON NoSQL
【MongoDB系列相关笔记】常用命令
本文主要介绍了常见的MongoDB命令操作;结合某个案例需求,将数据库操作,集合操作,文档基本的CURD以及分页查询等命令进行详细说明。
240 0
|
10月前
|
NoSQL JavaScript Linux
【MongoDB系列相关笔记】单机部署
本文主要介绍了Windows和Linux系统中安装和启动MongoDB的步骤。
190 0
|
10月前
|
存储 NoSQL 关系型数据库
【MongoDB系列笔记】MongoDB相关概念
MongoDB 是一个开源、高性能、无模式的文档型数据库,常用于处理高并发、海量数据的场景,尤其适合社交、游戏、物流、物联网和视频直播等领域。与传统的关系型数据库相比,MongoDB 更适合存储结构较为灵活、数据量大且事务性要求不高的数据。当面临高读写需求、大规模数据存储和高可扩展性需求时,可以选择 MongoDB。MongoDB 支持类似于 JSON 的 BSON 数据格式,具有丰富的数据模型,如文档、集合和数据库,以及强大的查询和索引功能。此外,MongoDB 提供复制集以实现高可用性和水平扩展性,以适应业务发展和数据增长。
219 0
|
10月前
|
NoSQL Java MongoDB
MongoDB笔记
MongoDB笔记
61 0
|
运维 NoSQL MongoDB
[慕课笔记]mongodb入门篇
[慕课笔记]mongodb入门篇
77 1
|
前端开发 JavaScript NoSQL
[慕课笔记] node+mongodb建站攻略
[慕课笔记] node+mongodb建站攻略
70 0
|
SQL 存储 JSON
MongoDB随手笔记(一)
MongoDB随手笔记(一)
MongoDB随手笔记(一)
|
存储 JSON NoSQL
mongodb笔记
mongodb笔记
438 0
|
1月前
|
存储 NoSQL MongoDB
数据库数据恢复—MongoDB数据库迁移过程中丢失文件的数据恢复案例
某单位一台MongoDB数据库由于业务需求进行了数据迁移,数据库迁移后提示:“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”