mongoDB操作详细

简介

它和我们使用的关系型数据库最大的区别就是约束性,可以说文件型数据库几乎不存在约束性,理论上没有主外键约束,没有存储的数据类型约束等等

关系型数据库中有一个 "表" 的概念,有 "字段" 的概念,有 "数据条目" 的概念

MongoDB中也同样有以上的概念,但是名称发生了一些变化,严格意义上来说,两者的概念即为相似,但又有些出入,不过无所谓,我们就当是以上概念就好啦

数据结构

MongoDB的每个表(Collection)中存储的每条数据(Documents)都是一个一个的Json,Json中的每一个字段(Key)我们称之为:Field

就此我们引出了三个关键字,Collection也就是关系型数据库中"表"的概念,Documents就是"数据条目",Field就是"字段"

软件安装

本博客基于MongoDB 3.4进行演示,小伙伴们自行去下载一个,点击下一步下一步安装完成后,加入MongoDB的bin文件中,复制文件路径并添加到环境变量中,这个时候打开cmd输入mongod进行测试

那我们就在C:下面创建一个data文件夹,里面再创建一个db文件夹

再启动服务发现OJBK了

我们再开启一个cmd窗口去链接我们开启的mongod服务,发现能够正确连上了。这里需要记住的小小知识点有,常用数据库软件的默认端口号

MySQL:3306

Redis:6379

MongoDB:27017

提醒一下,在操作mongoDB数据库的时候,你可千万别把刚刚启动的mogond窗口关了哈,那就相当于是数据库服务器,你叉了就GG了,恭喜再来一次了就!

MongoDB中的增删改查

在开始之前需要介绍一下MongoDB独有的特点:使用不存在的对象即创建该对象到内存,如果对创建的对象进行了增加数据操作,那么就会在数据库中真真实实,明明白白的自动帮我们创建出来(这一特性对数据的操作依然有效,即操作数据没有的字段,那么就会给该数据新增这一字段)

插入数据的方式有插入单挑和插入多条两种(insertOne insertMany)

insertOne: 插入一条数据,官方推荐

insertMany:插入多条数据,无需参数控制,官方推荐,多条数据用[]包裹,这个更普遍的叫法是array,而不是我们python里面的列表,将列表别人可能不懂,但是你讲array那肯定能懂

介绍完增删改查你就会发现,只有查有点特殊,

查询多条find后面不跟Many

查询单条findOne

修改一条updateOne({})

这里就展示了开头我们说的mongodb的特殊性,使用不存在的对象就自动给你创建,至于上面出现的$set后面再介绍

修改多条数据updateMany({})

remove({}):无条件删除数据,这里要注意了,这是删除所有数据,清空Collection

MongoDB数据结构

Object ID :Documents 自生成的 _id

String: 字符串,必须是utf-8

Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)

Integer:整数 (需要注意的是mongoDB中出现的数字默认都是Double类型而不是整型)

Double:浮点数 (没有float类型,所有小数都是Double)

Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)

Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典

Null:空数据类型 , 一个特殊的概念,None Null

Timestamp:时间戳

Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)

看着挺多的,但是真要是用的话,没那么复杂,很简单的哦

 1.Object ID:

"_id" : ObjectId("5b151f8536409809ab2e6b26")#"5b151f85" 代指的是时间戳,这条数据的产生时间
#"364098" 代指某台机器的机器码,存储这条数据时的机器编号
#"09ab" 代指进程ID,多进程存储数据的时候,非常有用的
#"2e6b26" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
#以上四种标识符拼凑成世界上唯一的ObjectID
#只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
#可以得到以上四种信息#注意:这个类型是不可以被JSON序列化的

这是MongoDB生成的类似关系型DB表主键的唯一key,注意中说了,这个ID不能被序列化,那么我们该如何传输呢?一会介绍pymongo的时候会给出答案!

2.Date:

"_id" : ObjectId("5b163ba1993ddc4cd4918eb2"),"name" : "Hello","date" : ISODate("2018-06-05T15:28:33.705+08:00")

一般不用,而是用ISODate.valueof()直接是时间戳格式,到哪都好使

MondoDB中的$相关

一.查询中常见的 等于 大于 小于 大于等于 小于等于

等于 : 在MongoDB中什么字段等于什么值其实就是 " : " 来搞定 比如 "name" : "啊哈哈"

大于 : 在MongoDB中的 大于 > 号 我们用 : $gt  比如 :  "score" : { $gt : 80 } 就是 得到 "score" 大于 80 的数据

小于 : 在MongoDB中的 小于 < 号 我们用 : $lt  比如 :  "score" : { $lt : 80 } 就是 得到 "score" 小于 80 的数据

大于等于 : 在MongoDB中的 大于等于 >= 号 我们用 : $gte  比如 :  "score" : { $gte : 80 } 就是 得到 "score" 大于等于 80 的数据

小于等于 : 在MongoDB中的 小于等于 <= 号 我们用 : $lte  比如 :  "score" : { $lte : 80 } 就是 得到 "score" 小于等于 80 的数据

这就是MongoDB中的运算符,是不是很类似我们使用的ORM中的运算符啊,没错,最开始的时候我们就已经说了,MongoDB的操作就是很类似ORM的

二.MongoDB中的那些个update修改器: $inc $set $unset $push $pull

1.$inc : Python中的  变量 += 1 , 将查询到的结果 加上某一个值 然后保存

 {$inc:{"score":1}}的意思是,"score"的原有数值上面 +1,$inc 的用法是不是很简单啊,就是原有基础上在增加多少对吧

2.$set : 此前我们已经提到过 $set 的用法和特性(没有就自动添加一条)了

再把 "score" 为 20 分的 "score" 赋值为 59 分

3.$unset : 用来删除Key(field)的

做一个小例子 : 刚才我们有一个新的"english_name" 这个field ,现在我们来删除它

成功了! {$unset:{"english_name" : 1}} 就是删除 "english_name" 这个 field 相当于 关系型数据库中删除了 字段

4. $push : 它是用来对Array (list)数据类型进行 增加 新元素的,相当于我们大Python中 list.append() 方法

首先我们要先对原有数据增加一个Array类型的field:

使用update $set 的方法只能为Document中的第一条添加

使用updateMany $set 的方法 可以为所有满足条件的 Document 添加 "test_list" , 注意我这里的条件为空 " {} " 就算是为空,也要写上"{}" 记住记住记住

接下来我们就要队列表进行添加了: 将 "score" 为 100 的Document 中"test_list" 添加一个 6

$push 是在 Array(list) 的尾端加入一个新的元素  {$push : {"test_list" : 6}}

 5.$pull : 有了$push 对Array类型进行增加,就一定有办法对其内部进行删减,$pull 就是指定删除Array中的某一个元素

把我们刚才$push进去的 6 删除掉

如果 Array 数据类型中 如果有 多个 6 怎么办呢?

全部删掉了.....

得出了一个结论,只要满足条件,就会将Array中所有满足条件的数据全部清除掉

6. $pop : 指定删除Array中的第一个 或 最后一个 元素

做个小例子: 删除"score" 等于 100 分  test_list 的最后一个元素

怎么删除第一个呢?

{$pop:{"test_list" : -1}}  -1 代表最前面, 1 代表最后边 (这和我们大Python正好相反) 记住哦

MongoDB中的$奇妙用法

在MongoDB中有一个非常神奇的符号 "$"

"$"  在 update 中 加上关键字 就 变成了 修改器

其实 "$" 字符 独立出现也是有意义的 , 我起名叫做代指符

针对object操作

前面的price.price表示的是price这个字段下的所有含有price键的数据值,后面的price.$指的就是找到的array下表对应的y一行数据{},再.字段拿到键对应的值

MongoDB中的限制查询条数

1. Limit 选取 : 我要从这些 Document 中取出多少个

做个小例子 : 我只要 2 条 Document

2.Skip 跳过 : 我要跳过多少个Document

做个小例子 : 我要跳过前两个 Document 直接从第三个Document 开始

3.Limit + Skip : 从这儿到那儿 的 选取

就是刚才的问题,一个小例子 : 我只想要第二条和第三条怎么处理呢

4. Sort 排序 : 将结果按照关键字排序

做个小例子 : 将find出来的Document 按照 price 进行 升序 | 降序 排列

国际惯例 : 按照 price 字段进行升序 , 1 为升序 , -1 为降序

5. Limit + Skip + Sort 混搭来一把

一个例子 : 选取第二条第三条 并 按照 price 进行 升序排列

问题出现了, 按道理不应该是 9800 然后 19800 吗?

知识点来喽

重点 : Sort + Skip + Limit 是有执行优先级的 他们的界别分别是 优先 Sort  其次 Skip 最后 Limt

Skip + Limit 的优先级 也是先 Skip 再 Limit

 

看一次,记不住

看两次,不会用

看三次,不如自己做一次

做一次,不如做三次

 

练习一下加深印象

转载于:https://www.cnblogs.com/Dominic-Ji/p/9524079.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 存储过程 on_MySQL存储过程的权限问题小结

MySQL的存储过程&#xff0c;没错&#xff0c;看起来好生僻的使用场景。问题源于一个开发同学提交了权限申请的工单&#xff0c;需要开通一些权限。本来是一个很正常的操作&#xff0c;但在我来看是比较着急且紧迫的&#xff0c;说来惭愧&#xff0c;忙着方向规划和开发的事情&…

搜索引擎蜘蛛爬虫原理

permike 原文 搜索引擎蜘蛛爬虫原理 关于搜索引擎的大话还是少说些&#xff0c;下面开始正文搜索引擎蜘蛛爬虫原理&#xff1a; 1 聚焦爬虫工作原理及关键技术概述 网络爬虫是一个自动提取网页的程序&#xff0c;它为搜索引擎从Internet网上下载网页&#xff0c;是搜索引擎的重…

《Android开发艺术探索》读书笔记 (10) 第10章 Android的消息机制

第10章 Android的消息机制 10.1 Android消息机制概述 (1)Android的消息机制主要是指Handler的运行机制&#xff0c;其底层需要MessageQueue和Looper的支撑。MessageQueue是以单链表的数据结构存储消息列表但是以队列的形式对外提供插入和删除消息操作的消息队列。MessageQueue只…

mysql索引引擎_mysql搜索引擎和索引那些事

mysql的存储引擎三种存储方式**InnoDB **(默认)一个文件存储表结构&#xff0c;一个存储数据和目录(索引)# 一个文件 book_name | author| press | price | pub_date frm文件 frame的缩写# 另一个文件(数据 目录)# | 倚天屠龙记 | egon | 北京工业地雷出版社 | 70.00 | 2019-07…

SPOJ HIGH Highways ——Matrix-Tree定理 高斯消元

【题目分析】 Matrix-Tree定理高斯消元 求矩阵行列式的值&#xff0c;就可以得到生成树的个数。 至于证明&#xff0c;可以去看Vflea King&#xff08;炸树狂魔&#xff09;的博客 【代码】 #include <cmath> #include <cstdio> #include <cstring> #include…

深度ip转换器手机版app_房串串经纪人版app下载-房串串经纪人版app手机版 v1.0.0...

房串串经纪人版app&#xff1a;专门为房产经纪人打造的辅助办公软件&#xff0c;提供的功能非常的全面&#xff0c;涵盖了房产服务过程中的各个环节&#xff0c;随时可以手机在线处理自己的日常工作&#xff0c;提高了工作的效率&#xff0c;操作很简单&#xff0c;让你更好的实…

netduino之电源参考电路MC33269DT-5.0G

手里有块netduino的板子&#xff0c;一直闲置未用&#xff0c;netduino具体是什么不知道的就百度吧&#xff0c;我这也不是主要讲netduino开发的&#xff0c;简单说就是用.net开发硬件&#xff0c;了解到netduino也是原来学过C#&#xff0c;当然我主要的工作还是嵌入式硬件开发…

汉王考勤 连接mysql_汉王考勤管理软件打开时出现:连接数据错误,请确认数据库服务器信息是否有误。这样该怎样解决?...

汉王指纹考勤系统故障答疑1. 考勤钟上的指纹记录丢失了。答&#xff1a;没有可能自己丢失&#xff0c;只可能是误删除了指纹信息&#xff0c;只能重新登录指纹。2. 在预处理时时间过长。答&#xff1a;由于用户单位的人员多&#xff0c;软件设置的班次乱等因素造成&#xff1b;…

PowerShell使用教程

一、说明 1.1 背景说明 个人对PowerShell也不是很熟悉&#xff0c;开始的时候就突然看到开始菜单中多了个叫PowerShell的文件夹&#xff0c;后来一点就看到某个教程视频说PowerShell很厉害但也没怎么听&#xff0c;再后来就看到kali也有了一些PowerShell的脚本这才意识到PowerS…

python Gunicorn

1. 简介 Gunicorn(Green Unicorn)是给Unix用的WSGI HTTP 服务器&#xff0c;它与不同的web框架是非常兼容的、易安装、轻、速度快。 2. 示例代码1 def app(environ, start_response):data b"Hello World\n"start_response("200 OK", [("Content-Type…

如何使处于不同局域网的计算机实现远程通信_小区自来水二次加压泵站远程监控系统方案...

一、小区自来水二次加压泵站远程监控系统方案项目概述随着城市高效快速地发展&#xff0c;市区规模越来越大&#xff0c;小区二次加压泵房将继续增加&#xff0c;供水公司二次加压泵房管理工作将更加繁重。目前小区二次加压供水方式主要有两种&#xff0c;一种是不锈钢水箱不锈…

Java中的Enum的使用与分析

示例&#xff1a; public enum EnumTest {FRANK("The given name of me"),LIU("The family name of me");private String context;private String getContext(){return this.context;}private EnumTest(String context){this.context context;}public sta…

postgresql返回行数_怎么优化你的SQL查询?以PostgreSQL为例

实际工作中&#xff0c;我们每个人难免都会要写SQL&#xff0c;执行SQL&#xff0c;但是有时时候执行非常慢&#xff0c;甚至获得不了结果。这时候你会怎么办&#xff1f;放弃&#xff1f;去苦口婆心的求隔壁房间胡子擦擦的猥琐DBA大叔&#xff1f;NO&#xff0c;正确方法是先检…

首次构建android studio gradle 下载缓慢的问题

1、先使用其他工具下载gradle&#xff0c; https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 2、然后放在C:\Users\Administrator\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv 目录中 随机码文件夹可以通过先尝试构建&#xff0c;让…

288. Unique Word Abbreviation

题目&#xff1a; An abbreviation of a word follows the form <first letter><number><last letter>. Below are some examples of word abbreviations: a) it --> it (no abbreviation)1 b) d|o|g --> d…

jqgrid mysql 分页_jQgrid 分页显示

当使用jqgrid去显示数据的时候&#xff0c;如果数据太多&#xff0c;那么jqgrid就会绘制的很慢&#xff0c;这样很影响用户的体验&#xff0c;十分影响用户的心情&#xff0c;所以我们采用分页的方式去取数据&#xff0c;这样就能避免用户长时间的等待&#xff0c;从而提升用户…

echarts 词云_python Flask+爬虫制作股票查询、历史数据、股评词云网页

自学python的数据分析&#xff0c;爬虫后&#xff0c;花了几天时间看视频学习Flask做了一个简单的股票查询网页。本来还想着加入一些其他功能&#xff0c;比如财务指标分析&#xff0c;舆情分析&#xff0c;最完美的想法是做成一个股票评分系统&#xff0c;输入股票代码可以自动…

JavaSE基础知识(6)—异常和异常处理

一、异常的理解及体系结构图 1、理解 异常&#xff1a;程序运行过程中发生的不正常现象。java中的错误&#xff1a;   语法错误   运行异常   逻辑错误 2、体系图 java程序在执行过程中所发生的异常分为两类&#xff1a; Error&#xff1a;Java虚拟机无法解决的严重问题。…

peripheralStateNotificationCB

1 /*********************************************************************2 * fn peripheralStateNotificationCB 外围设备 状态 通知 回调函数3 *4 * brief Notification from the profile of a state change. 通知来自于profile的状态改变&#xff01;5 *6 * …

mysql dump 1017_MySQL数据库导出 - Can't Wait Any Longer - OSCHINA - 中文开源技术交流社区...

本文内容主要来自MySQL官方文档&#xff1a;“MySQL5.1 Reference&#xff0c;2.10.3. 将MySQL数据库拷贝到另一台机器”注意&#xff1a;参数名与值间可以不用空格&#xff0c;如-uroot或-u root均可&#xff1b;某些参数会有不同含义1.数据库导出(-A导出所有数据库&#xff0…