MongoDB常用的数据类型有哪一些?如何操作?
Admin 2021-05-06 群英技术资讯 811 次浏览
MongoDB常用数据类型有哪些?这个问题对于刚接触MongoDB数据库的朋友来说可能不是和清楚,下面小编就给大家介绍一下关于MongoDB常用的数据类型以及基本操作,感兴趣的朋友就继续往下看吧。
MongoDB中的文档类似json,我们知道,在json中,最常用的数据类型有null、bool、数组、字符串、数据、json对象等等。相对比较少,比如对于时间类型的数据,json是无法表示的,而MongoDB中对json进行了简单的优化,像json,但是又不是json。下面我们慢慢说
MongoDB的常用数据类型和MySQL比较像,你可以对比着看。它的常用数据类型有:
用于表示空值或者不存在的字段
{"x":null}
这个容易理解,true or false
{"x":true}
在MongoDB自带的shell中不可用,shell中的需要使用函数来表示整数,如下:
{"x":NumberInt("3")}
如果我们写成
{"x":3}
这里的3会被表示成double。
最常用的数据类型
{"x":"string"}
对象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的唯一性。
日期类型存储的是从标准纪元开始的毫秒数,不存储时区。
{"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"]}
文档可以包含别的文档
{"x":{"foo":"bar"}}
文档中可以包含JavaScript代码
{"x":function(){/*-----*/}}
这块儿可能是比较关键的部分了,在MySQL中,增删改查是最最基础的功能,在MongoDB中,这些技能也是必备的。
查看当前数据库下面的集合,可以使用show collections命令。
在MongoDB中,不需要单独创建集合,一般情况下,只要我们直接将文档插入到集合中,就可以看到集合自动生成了,举个例子:
> show collections # 查看集合 num person > db.aaa.insert({"name":"yeyz"}) WriteResult({ "nInserted" : 1 }) > show collections #查看集合,发现aaa这个集合生成了 aaa num person
> show collections aaa num person > > db.aaa.drop() #删除集合 true > show collections num person
关于集合,最常见的操作就是上面几个。查询集合、创建集合、删除集合。
上面的例子中,我们使用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" }
查询文档的方法比较多,展开来说可以说很久,就像我们的SQL语法一样,有各种各样的写法,这里先说下最简单的,查找所有对象、查找一条对象,或者查找某一条对象的方法。看例子:
#查找所有记录 > db.aaa.find() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } { "_id" : ObjectId("5f983ba1f24f04e23fb6387d"), "name" : "zhangsan" } > > #查找一条记录 > db.aaa.findOne() { "_id" : ObjectId("5f983b81f24f04e23fb6387c"), "name" : "yeyz" } #带过滤条件的,查找name=zhangsan的记录 > 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()来删除所有的记录。
更新记录,在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 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常用数据类型的介绍就到这,小编认为这些都是比较实用的,有一定的参考价值,因此有需要的朋友可以参考参考,希望对大家学习有帮助。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
MongoDB 创建数据库 语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库。 实例 以下实例我们创建了数据库 runoob: > use runoob switched to db runoob > db runoob > 如果你想查看所有数据库,可以使用 show dbs 命令: > show dbs admin..
MongoDB 关系 MongoDB 的关系表示多个文档之间在逻辑上的相互联系。 文档间可以通过嵌入和引用来建立联系。 MongoDB 中的关系可以是: 1:1 (1对1) 1: N (1对多) N: 1 (多对1) N: N (多对多) 接下来我们来考虑下用户与用户地址的关系。 一个用户可以有多个地址,所以是一对多的关系。 以下是 user 文档的简单结构: { '_id':ObjectId(�..
接触过SQL都知道,索引是很重要的内容。在MongoDB中索引也是很重要的,数据库的索引能够提高查询操作的性能,能快速获取我们想要的介绍。下面我们就一起来了解一下MongoDB索引。
MongoDB PHP 在php中使用mongodb你必须使用 mongodb 的 php驱动。 MongoDB PHP在各平台上的安装及驱动包下载请查看:PHP安装MongoDB扩展驱动 如果你使用的是 PHP7,请参阅:PHP7 MongoDB 安装与使用。 确保连接及选择一个数据库 为了确保正确连接,你需要指定数据库名,如果数据库在mongoDB中不存在,mongoDB会自动创建 代码片段如下: 创建集合 创建集合的..
这篇文章主要介绍了详解mongoDB主从复制搭建详细过程的相关资料,这里对实现主从复制进行了详细的步骤介绍,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008