文章目录 1. MongoDB的概述 2. bson 3. MongoDB数据库特点 4. MongoDB存储的数据类型 5. Docker下使用MongoDB 1. MongoDB的概述 MongoDB数据库是一个跨平台,面向文档的数据库。 支持的结构非常松散,是类似于json的bson数据,可以存储比较复杂的数据类型。 适合使用MongoDB的情况:数据量大,写入频繁,数据的价值相对较低。2. bson bson全称binary json,是一种类json的二进制格式,可以把它理解为JSON的“机器语言版”。 bson的特点: 1)快 (遍历速度极快):BSON在每条记录前都存储了总长度,解析器可以跳过不需要的字段直接定位到目标数据,而JSON必须从头到尾扫描文本。 2)轻 (空间利用率高):虽然BSON会额外存储一些元数据(如长度、类型),但它使用紧凑的二进制编码,且支持整数、日期、原生浮点数等JSON不支持的类型,避免了JSON中数字转字符串带来的空间浪费。 3)强 (数据类型更丰富):JSON只支持字符串、数字、布尔、数组、对象、null这6种基础类型。BSON在此基础上增加了:日期类型 (Date)、整数类型 (Int32, Int64)、字节数组 (BinData) - 用于存储图片、文件等二进制数据、正则表达式、时间戳、JavaScript代码 等。3. MongoDB数据库特点 1)面向文档的 NoSQL 数据库,数据存储是bson,而不是表格,每个文档是一个完整的对象。 2)灵活模式:同一个集合(Collection)中的文档可以有不同的字段结构,不需要预先定义表结构。 3)高可扩展性:原生支持水平扩展(分片),可以轻松将数据分布到成百上千台服务器上。 4)高性能:适合高并发读写,尤其是写操作(通过索引、内存映射等机制优化)。 5)丰富的查询语言:支持等值查询、范围查询、聚合管道、文本搜索、地理位置查询等。 6)索引支持:支持单字段、复合、多键(数组)、文本、地理空间等多种索引。 7)高可用性:通过副本集(Replica Set)自动故障转移,保证数据不丢失。4. MongoDB存储的数据类型 1)null 2)布尔 3)数值:默认是64位的浮点(Double),如果想存整数,可以使用NumberInt(4字节),NumberLong(16字节)。 4)字符串 5)日期 6)正则表达式 7)数组 8)内嵌文档 9)对象ID 10)二进制数据 11)代码片段5. Docker下使用MongoDB 1) 默认端口:27017 2)登录:mogo 192.182.2.144 ,进去以后是test数据库 3)退出:exit 4)启动: docker run -di --name=mymongodb -p 27017:27017 mongo11 【mongo11是image的id,根据实际情况修改】 5)创建并使用数据库: use mongo1 【如果有,直接使用,如果没有,先创建再用】 6)插入一条数据: db.article.insert({"_id":"111","name":"张三","count":NumberLong(222)}) ; 注:_id 是默认id,如果没有赋值,默认是一个24位的随机数,如果手动赋值了,就是我们手动赋的值。 7)查询所有:db.article.find(); 8)修改/更新:db.article.update({"_id":"111"},{$set:{"name":"更新后的名称","count":NumberInt(20)}}); 9) 查询总记录数:db.article.count(); 10) 条件查询:db.article.find({"id":"111"}); 11) 模糊查询: 1. 查询包含李的:db.article.find({"name":/李/}) ; 2. 查询李开头的:db.article.find({"name"=/^李/}); 12)条件查询 大于:$gt 小于:$lt 大于等于:$gte 小于等于: $lte 不等于:$ne 包含:$in 不包含:$nin 并且:$and 或者:$or 查询访问量大于3000的:db.article.find({"count":{$gt:NumberLong(3000)}}); 查询type类型等于1,并且name包含李的:db.article.find({$and:[{"type":"1"},{"name":/李/}]}); 查询访问量大于1000或者type类型是1,同时name包含李的:db.article.find({$and:[{$or:[{"tyoe":"1"},{"count":{$gt:NumberLong(1000)}}]},{"name":/李/}]}); 13)列值自动增长:$inc 让id是111的count每次自增100:db.article.update:({"id":"111"},{$inc:{"count":NumberInt(100)}});