MongoDB 数据库基础 之 常用的数据类型和基本操作
MongoDB中的文档类似json,我们知道,在json中,最常用的数据类型有null、bool、数组、字符串、数据、json对象等等。相对比较少,比如对于时间类型的数据,json是无法表示的,而MongoDB中对json进行了简单的优化,像json,但是又不是json。下面我们慢慢说
MongoDB的常用数据类型和MySQL比较像,你可以对比着看。它的常用数据类型有:
1、null用于表示空值或者不存在的字段
{ x :null}
2、bool这个容易理解,true or false
{ x :true}
在MongoDB自带的shell中不可用,shell中的需要使用函数来表示整数,如下:
{ x :NumberInt( 3 )}
如果我们写成
{ x :3}
这里的3会被表示成double。
4、字符串最常用的数据类型
{ x : string }
5、对象id对象id是12字节的唯一ID
{ x :ObjectId()}
在MongoDB的数据记录里面,也就是文档里面,必须有一个_id键,这个_id键你可以简单理解为唯一标识,类似MySQL中的自增主键,但是它一般不设置成自增的,因为在分布式环境中,同步自动增加主键值既费时又费力,MongoDB为了保证分布式场景下的性能,通过自身生成方式来产生_id,_id的类型,称之为ObjectId类型。
该类型使用12字节的存储空间,每个字节里面是2位16进制的数字,是一个24位的字符串。这12个字节的生成方式如下:
0、1、2、3位是时间戳,提供秒级别唯一性
4、5、6位是机器的唯一标识符,提供机器级别唯一性
7、8位是当前生成ObjectId的进程标识符,保证不同进程的唯一性
9、10、11位是一个计数器,保证同一秒相同进程产生的ObjectId的唯一性。
6、日期类型日期类型存储的是从标准纪元开始的毫秒数,不存储时区。
{ x :new Data()}
示例如下:
db.num.insert({"age": new Date()}) WriteResult({ "nInserted" : 1 }) db.num.find() { "_id" : ObjectId("5f96b5e15e5c5ff982b9c6af"), "age" : 28 } { "_id" : ObjectId("5f9835d0f24f04e23fb63878"), "age" : 3 } { "_id" : ObjectId("5f983621f24f04e23fb63879"), "age" : 3 } { "_id" : ObjectId("5f9838d2f24f04e23fb6387a"), "age" : ISODate("2020-10-27T15:12:18.739Z") }
值的集合或者列表可以表示成数组
{ x :[ a , b , c ]}
8、内嵌文档文档可以包含别的文档
{ x :{ foo : bar }}
文档中可以包含JavaScript代码
{ x :function(){/* */}}
NO.2 集合文档的基本操作这块儿可能是比较关键的部分了,在MySQL中,增删改查是最最基础的功能,在MongoDB中,这些技能也是必备的。
集合相关操作 1、查询集合查看当前数据库下面的集合,可以使用show collections命令。
2、创建集合在MongoDB中,不需要单独创建集合,一般情况下,只要我们直接将文档插入到集合中,就可以看到集合自动生成了,举个例子:
show collections # 查看集合 person db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) show collections #查看集合,发现aaa这个集合生成了 person3、删除集合
show collections person db.aaa.drop() #删除集合 show collections person
关于集合,最常见的操作就是上面几个。查询集合、创建集合、删除集合。
再来看文档相关的操作: 1、插入文档上面的例子中,我们使用insert操作已经演示了插入文档的方法。我把两种常见的方法写在一起:
方法一:直接插入文档 db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) 方法二:将文档保存在变量里面,插入变量 record={"name":"zhangsan"} { "name" : "zhangsan" } db.aaa.insert(record) WriteResult({ "nInserted" : 1 }) 查找集合所有内容 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }2、查询文档
查询文档的方法比较多,展开来说可以说很久,就像我们的SQL语法一样,有各种各样的写法,这里先说下最简单的,查找所有对象、查找一条对象,或者查找某一条对象的方法。看例子:
#查找所有记录 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }3、删除记录
db.aaa.find({"name":"zhangsan"}) { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }
删除记录的方法也比较简单,如下:
#查找所有记录 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" } #删除name=zhangsan的记录 db.aaa.remove({"name":"zhangsan"}) WriteResult({ "nRemoved" : 1 }) db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } # 仅剩name=yeyz的一条记录 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
如果不想要过滤条件,可以直接使用:
db.aaa.remove()来删除所有的记录。
4、更新记录更新记录,在MongoDB中有些麻烦,例如下面的场景
#查找所有记录 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" } #用一个变量表示要修改的文档 record={"name" : "yeyz","age":18} { "name" : "yeyz", "age" : 18 } #用刚才的变量替换匹配条件的结果 db.aaa.update({"name" : "yeyz"},record) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz", "age" : 18 } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" } # 修改变量的age属性 record.age=20 #再次替换原来的文档 db.aaa.update({"name" : "yeyz"},record) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz", "age" : 20 } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" }
上面的方法在条件唯一匹配的时候不会有问题,但是在条件不唯一匹配的场景下,可能存在一些隐患,下次我们再分享,今天就先这么点儿吧。
每天的内容不多,慢慢来,一点一点搞懂它。。。晚安喽。
NO.1 MongoDB的常用数据类型MongoDB中的文档类似json,我们知道,在json中,最常用的数据类型有null、bool、数组、字符串、数据、json对象等等。相对比较少,比如对于时间类型的数据,json是无法表示的,而MongoDB中对json进行了简单的优化,像json,但是又不是json。下面我们慢慢说
MongoDB的常用数据类型和MySQL比较像,你可以对比着看。它的常用数据类型有:
1、null用于表示空值或者不存在的字段
{ x :null}
2、bool这个容易理解,true or false
{ x :true}
在MongoDB自带的shell中不可用,shell中的需要使用函数来表示整数,如下:
{ x :NumberInt( 3 )}
如果我们写成
{ x :3}
这里的3会被表示成double。
4、字符串最常用的数据类型
{ x : string }
5、对象id对象id是12字节的唯一ID
{ x :ObjectId()}
在MongoDB的数据记录里面,也就是文档里面,必须有一个_id键,这个_id键你可以简单理解为唯一标识,类似MySQL中的自增主键,但是它一般不设置成自增的,因为在分布式环境中,同步自动增加主键值既费时又费力,MongoDB为了保证分布式场景下的性能,通过自身生成方式来产生_id,_id的类型,称之为ObjectId类型。
该类型使用12字节的存储空间,每个字节里面是2位16进制的数字,是一个24位的字符串。这12个字节的生成方式如下:
0、1、2、3位是时间戳,提供秒级别唯一性
4、5、6位是机器的唯一标识符,提供机器级别唯一性
7、8位是当前生成ObjectId的进程标识符,保证不同进程的唯一性
9、10、11位是一个计数器,保证同一秒相同进程产生的ObjectId的唯一性。
6、日期类型日期类型存储的是从标准纪元开始的毫秒数,不存储时区。
{ x :new Data()}
示例如下:
db.num.insert({"age": new Date()}) WriteResult({ "nInserted" : 1 }) db.num.find() { "_id" : ObjectId("5f96b5e15e5c5ff982b9c6af"), "age" : 28 } { "_id" : ObjectId("5f9835d0f24f04e23fb63878"), "age" : 3 } { "_id" : ObjectId("5f983621f24f04e23fb63879"), "age" : 3 } { "_id" : ObjectId("5f9838d2f24f04e23fb6387a"), "age" : ISODate("2020-10-27T15:12:18.739Z") }
值的集合或者列表可以表示成数组
{ x :[ a , b , c ]}
8、内嵌文档文档可以包含别的文档
{ x :{ foo : bar }}
文档中可以包含JavaScript代码
{ x :function(){/* */}}
NO.2 集合文档的基本操作这块儿可能是比较关键的部分了,在MySQL中,增删改查是最最基础的功能,在MongoDB中,这些技能也是必备的。
集合相关操作 1、查询集合查看当前数据库下面的集合,可以使用show collections命令。
2、创建集合在MongoDB中,不需要单独创建集合,一般情况下,只要我们直接将文档插入到集合中,就可以看到集合自动生成了,举个例子:
show collections # 查看集合 person db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) show collections #查看集合,发现aaa这个集合生成了 person3、删除集合
show collections person db.aaa.drop() #删除集合 show collections person
关于集合,最常见的操作就是上面几个。查询集合、创建集合、删除集合。
再来看文档相关的操作: 1、插入文档上面的例子中,我们使用insert操作已经演示了插入文档的方法。我把两种常见的方法写在一起:
方法一:直接插入文档 db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) 方法二:将文档保存在变量里面,插入变量 record={"name":"zhangsan"} { "name" : "zhangsan" } db.aaa.insert(record) WriteResult({ "nInserted" : 1 }) 查找集合所有内容 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }2、查询文档
查询文档的方法比较多,展开来说可以说很久,就像我们的SQL语法一样,有各种各样的写法,这里先说下最简单的,查找所有对象、查找一条对象,或者查找某一条对象的方法。看例子:
#查找所有记录 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }3、删除记录
db.aaa.find({"name":"zhangsan"}) { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" }
删除记录的方法也比较简单,如下:
#查找所有记录 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" } #删除name=zhangsan的记录 db.aaa.remove({"name":"zhangsan"}) WriteResult({ "nRemoved" : 1 }) db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } # 仅剩name=yeyz的一条记录 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" }
如果不想要过滤条件,可以直接使用:
db.aaa.remove()来删除所有的记录。
4、更新记录更新记录,在MongoDB中有些麻烦,例如下面的场景
#查找所有记录 db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" } #用一个变量表示要修改的文档 record={"name" : "yeyz","age":18} { "name" : "yeyz", "age" : 18 } #用刚才的变量替换匹配条件的结果 db.aaa.update({"name" : "yeyz"},record) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz", "age" : 18 } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" } # 修改变量的age属性 record.age=20 #再次替换原来的文档 db.aaa.update({"name" : "yeyz"},record) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz", "age" : 20 } { "_id" : ObjectId("5f983d76f24f04e23fb6387e"), "name" : "zhangsan" }
上面的方法在条件唯一匹配的时候不会有问题,但是在条件不唯一匹配的场景下,可能存在一些隐患,下次我们再分享,今天就先这么点儿吧。
每天的内容不多,慢慢来,一点一点搞懂它。。。晚安喽。
以上就是MongoDB 常用的数据类型和基本操作的详细内容,更多关于MongoDB 数据类型和基本操作的资料请关注其它相关文章!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MongoDB 数据库基础 之 常用的数据类型和基本操作
相关文章
- MongoDB数据库基础 之 mongodb条件查询和排序
- MongoDB 数据库基础 角色管理的详解
- MongoDB 数据库基础 之 mongodb内存管理相关总结
- MongoDB系列教程(六):java操作mongodb实例
- MongoDB for Java详解数据库
- 数据库:mongodb与关系型数据库相比的优缺点zz 详解大数据
- NoSQL数据库MongoDB:NoSQL数据库的首选(mongodb等于)
- MongoDB命令指南:从入门到精通(mongodb命令大全)
- 如何搭建在阿里云上的MongoDB数据库(mongodb阿里云)
- MongoDB:一种革命性的数据库技术(什么是mongodb)
- MongoDB如何完美恢复数据库(mongodb恢复数据库)
- MongoDB:让文档数据库的工作更简单(mongodb文档数据库)
- MongoDB与Redis:不同点异同之辨(mongodb和redis的区别)
- Node.js 使用 MongoDB 数据库实现数据存储(nodejs连接mongodb)
- 简单易学,一键完成的 MongoDB 安装指南(安装mongodb)
- MongoDB 切片:如何优化大规模数据存储和查询?(mongodb切片)
- 库的位置Mongodb默认数据库路径在哪里?(mongodb默认数据)
- 解决 MongoDB 乱码问题的方法(mongodb乱码)
- MongoDB:高效存储文档的首选数据库方案(mongodb存储文档)
- MongoDB精讲:深入理解NoSQL(mongodb详解)
- MongoDB调用:实现数据库的强大功能(mongodb调用)
- MongoDB分片集群实现高性能存储(mongodb分片配置)
- MongoDB批量处理加速数据库操作(mongodb批处理)
- 入门8天玩转 MongoDB:入门指南(8天mongodb)
- 了解MongoDB的安全性:保护数据的最佳方法(mongodb安全性)
- MongoDB大会盛况空前,探索未来数据库发展趋势(mongodb大会)
- 阿里云Mongodb是否价格过高?(阿里云mongodb贵么)
- MongoDB公司:开源数据库技术创新者(mongodb公司)
- MongoDB封装:极致性能与无忧畅通(mongodb 封装)