Mongodb基础
2021/9/27 19:11:24
本文主要是介绍Mongodb基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
mysql和mongodb 对比:
https://ifeve.com/mongodb%E5%92%8Cmysql%E5%AF%B9%E6%AF%94%E8%AF%91/
1.MongoDB 的优势:
MongoDB文档自然映射到现代的面向对象编程语言。使用MongoDB可以避免将代码中的对象转换为关系表的复杂对象关系映射(ORM)层。
扩展迁移灵活
灵活的数据模型
MongoDB使用场景:是各种场景下的通用数据库,而需要复杂多行事务的应用如订票系统等则最好使用mysql等关系型数据库
2.mongodb命名限制
(1)数据库名称不区分大小写,但是字段名字是区分的
window上不能包括:"$*<>:|?和空字符串 linux上不能包括"$和空字符串
3.mongodb和mysql关键字对应
4.文档结构
(1)文档又字段和值构成,值可以是任何BJSON结构,字段名称是字符串
(2)字段名称的限制:
_id是保留字段,在集合中唯一,且不可变,可以是数组以外任意类型,插入时可以自己指定,否则会自动生成;字段名称不能以美元符号$开头
(3)文件大小限制
BSON一个document最大大小为16MB
5**_id的说明(类似mysql的主键)**
(1)默认情况下会在该字段创建唯一索引,该字段始终会是第一个字段,插入时如果服务端收到的不是该字段,则会将该字段移动到开头,该字段不能是数组,其他bson结构都可
(2)常用的_id选项:ObjectId、业务唯一标识符(可以避免再添加附加索引,否则还得添加业务索引)、递增自然数
6 BSON类型说明
(1)BSON和JSON的区别
https://blog.csdn.net/lyq240919525/article/details/40440877
(2)BSON的优势:
遍历和解析速度快,每个元素(对象)存储时长度都存在元素头部,读长度直接可以seek到指定点,而json就需要对整个document扫描;操作简单:BSON在小规模修改时,比如9改为10,只需要在二进制位上修改即可,后面不用动,而JSON是基于字符串的,可能需要整体都修改移动
(3)BSON主要用在mongodb存储上,是一种二进制存储的格式,定义规范:https://bsonspec.org/spec.html,参考 https://blog.csdn.net/lyq240919525/article/details/40440877
(4)BSON采取的是小端存储方式
7.ObjectId
(1)12字节组成: 4字节的Unix时间戳(秒级)+5字节的随机数+3字节自增数,采取大端存储方式,
一般会设计成以下,由客户端实现,跟雪花算法一样,可以保证分布式下的_id唯一
img
8.BSON字符串编码格式默认为UTF-8,能处理绝大多数字符
9 mongo CRUD
(1)创建/新增操作,直接插入即可,collection不存在时就会创建,主要方法
insertOne(document),insertMany([doc0,doc1…])
(2)查询操作:
参考:查询选择器 https://mongodb.net.cn/manual/reference/operator/query/#query-selectors db.my_test.find() 查全部 等值查询: $eq 同理使用$ne db.my_test.find({q:1})按条件 db.my_test.find({q:{$eq:1}}) 等于数组 db.my_test.find({tags:['A','B']}) 查询字段tags与给定的条件数据完全相等或者tags中包含某个元素是数组,且与给定数组相同 查询结果:{ _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "A", "B" ] } { _id: 5, item: { name: "mn", code: "000" }, qty: 20, tags: [ [ "A", "B" ], "C" ] } 而不匹配: { _id: 3, item: { name: "ij", code: "456" }, qty: 25, tags: [ "B" ,"A"] } 嵌套等值查询,一定要加引号,否则语法错误 db.my_test.find({"out.inner0.q":1}) # 嵌套式document查询使用点符号:“ doc0.doc1.name":value 范围查询$in,语义上相当于$or,同理使用$nin db.my_test.find(_id:{$in:[123,ObjectId("615171366afb51344b68592b")]}) db.my_test.find(tags:{$in:['A','B']}}) 查询数组tags中包含A或者B的document $in与正则表达式一起使用 /pattern/ db.my_test.find({line_id:{$in:[/^631.*/,/^IHA.*/]}}) 集合中可匹配多个正则表达式 $gt $lt $gte $lte 大小范围查询 db.sc_fault.find({report_time:{$gt: new Date('2021-09-10'),$lt: new Date('2019-02-01')}}) 逻辑查询 $and $not $nor $or 其中nor是对or求补集,与or的结果互补 {$and:[{line_id:{$in:[/^631.*/,/^IHA.*/]}}, {level:{$gt:3}}]} nor举例: {$or:[{test:'test'},{many:'many'},{qty:{$lt:25}}]} 查询test=test或者many=many或者qty<25 则 $nor查询的是test!=test and many!=many and qty>=25的数据 $exists 字段是否存在查询 {$and:[{test:'test'},{many:{$exists:false}}]} 匹配test字段=test 但是many字段不存在 $type按照字段类型查询,mongo支持按照字段别名查询,字段类型如下 {_id:{$type:'objectId'}} img 对数组的查询 $all 匹配数组包含所有查询元素的document {tags:{$all:['A','B' ]}} 查询tags中包含A和B的document 相当于 {tags:{$and:[{tags:'A'},{tags:B}]}} $elemMatch 给定一个范围条件,返回至少有一个数组元素符合条件的对应的document {tags:{$elemMatch:{$lt:'C'}}} 只要tags中存在小于C的元素则返回该document $size 匹配数组长度 {tags:{$size:3}}
这篇关于Mongodb基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南