redis网站开发教程,接网站建设单子的网站,三墩网站建设,做本地网站赚钱简介 它和我们使用的关系型数据库最大的区别就是约束性,可以说文件型数据库几乎不存在约束性,理论上没有主外键约束,没有存储的数据类型约束等等 关系型数据库中有一个 表 的概念,有 字段 的概念,有 数据条目 的概念 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 MongoDB27017 提醒一下在操作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.70508: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