文章分类 -  MongoDB4.X+新特性

摘要:文档之间关系 MongoDB对于文档的格式并没有强制性的要求, 但不等于我们不能在文档中表达数据的关系,在MongoDB中我们可以通过 '内嵌式结构' 和 '规范式结构' 来表达文档之间的关系。 内嵌式结构 在一个文档中又包含了另一个文档, 我们就称之为内嵌式结构,例如: { name:'zs', 阅读全文
posted @ 2022-09-04 13:55 BNTang 阅读(62) 评论(0) 推荐(0) 编辑
摘要:删除索引 书写格式: db.<collection>.dropIndex(<IndexName | IndexDefine>) 插入测试数据: db.person.insert([ {name:'cs', age:19}, {name:'as', age:18}, {name:'bs', age:1 阅读全文
posted @ 2022-08-28 21:44 BNTang 阅读(180) 评论(0) 推荐(0) 编辑
摘要:索引生存时间 针对日期字段或者包含日期的数组字段, 我们可以在创建索引的时候, 指定索引的生存时间, 一旦索引超过了指定的生存时间, 那么 MongoDB 会自动删除超过生存时间的文档。 书写格式: db.<collection>.createIndex({<field>:<1 or -1>, .. 阅读全文
posted @ 2022-08-28 20:53 BNTang 阅读(187) 评论(0) 推荐(0) 编辑
摘要:索引的稀疏性 默认情况下 MongoDB 会给每一个文档都创建索引, 哪怕这个文档中没有指定索引的字段或者字段的取值是 Null,但是这样大大增加了索引的体积, 所以为了进一步优化索引占用的存储空间, 我们可以创建稀疏索引,也就是只会为存在索引字段, 并且索引字段取值不是 null 的文档创建索引。 阅读全文
posted @ 2022-08-28 15:54 BNTang 阅读(283) 评论(0) 推荐(0) 编辑
摘要:唯一索引 默认情况下 MongoDB 和 MySQL 一样, 都会自动为主键创建索引, 这个索引就是一个唯一索引,除了主键可以作为唯一索引以外, 只要某个字段的取值是唯一的, 我们也可以手动给这个字段添加唯一索引。 书写格式: db.<collection>.createIndex({<field> 阅读全文
posted @ 2022-08-28 13:24 BNTang 阅读(1536) 评论(0) 推荐(0) 编辑
摘要:索引对排序的影响 如果排序的字段, 正好是索引的字段, 那么会大大提升排序效率。 插入测试数据: db.person.insert([ { name: 'cs', age: 19 }, { name: 'as', age: 18 }, { name: 'bs', age: 17 } ]) 插入完测试 阅读全文
posted @ 2022-08-28 11:16 BNTang 阅读(340) 评论(0) 推荐(0) 编辑
摘要:多键索引 多键索引是专门针对数组字段的, 会为数组字段的每一个元素都创建一个索引。 ?> 插入测试数据: db.person.insert([ {name:'as', age:18, tags:['ahtml', 'bcss']}, {name:'bs', age:17, tags:['cjs', 阅读全文
posted @ 2022-08-21 14:35 BNTang 阅读(296) 评论(0) 推荐(0) 编辑
摘要:复合索引 和 MySQL 一样, MongoDB 也支持复合索引, 也就是将多个字段的值作为索引。 ?> 插入测试数据: db.person.insert([ {name:'cs', age:19}, {name:'as', age:18}, {name:'bs', age:17}, {name:' 阅读全文
posted @ 2022-08-20 21:36 BNTang 阅读(271) 评论(0) 推荐(0) 编辑
摘要:什么是索引 索引就相当于字典中的目录(拼音 / 偏旁部首手) 有了目录我们就能通过目录快速的找到想要的结果 但是如果没有目录(拼音 / 偏旁部首手), 没有索引 那么如果想要查找某条数据就必须从前往后一条一条的查找 所以, 索引就是用于提升数据的查询速度的 ?> 插入测试数据: db.person. 阅读全文
posted @ 2022-08-20 16:08 BNTang 阅读(29) 评论(0) 推荐(0) 编辑
摘要:数据类型转换操作符 ?> MongoDB 对于文档的格式并没有强制性的要求, 同一个集合中存储的文档, 字段的个数和数据类型都可以不同, 对与文档的格式没有强制性的要求是 MongoDB 的一大优势, 但是同时也增加了数据消费端的使用难度, 因为我们在使用数据的时候, 有可能同一个字段取出来的数据类 阅读全文
posted @ 2022-08-14 23:45 BNTang 阅读(699) 评论(0) 推荐(0) 编辑
摘要:字段路径表达式 <filed>:使 来指示字段路径 <filed>.<subfield>:使 和 . 来指示内嵌文档字段路径 示例 添加测试数据: db.person.insert([ {name:{firstName:'Jonathan', lastName:'Lee'}, 阅读全文
posted @ 2022-08-14 16:34 BNTang 阅读(37) 评论(0) 推荐(0) 编辑
摘要:聚合操作额外配置 db..aggregate(<pipeline>, <options>) 格式: db.<collection>.aggregate(<pipeline>, {allowDiskUse: <boolean>}) allowDiskUse 默认取值是 false, 默认情况下管道阶段 阅读全文
posted @ 2022-08-14 16:32 BNTang 阅读(53) 评论(0) 推荐(0) 编辑
摘要:聚合管道阶段 $out: 将前面阶段处理完的文档写入一个新的集合 格式: {$out: <new collection name>} 示例 db.person.aggregate([ { $group:{ _id: '$city', totalAge: {sum:age'}, avgAge: 阅读全文
posted @ 2022-08-14 13:14 BNTang 阅读(151) 评论(0) 推荐(0) 编辑
摘要:聚合管道阶段 $group: 对文档进行分组 格式: {$group:{ _id:<expression>, <field1>: {<accumulator1>: <expression1>} ... ... }} group 括号当中属性的含义: _id: 定义分组规则 <field>: 定义新字 阅读全文
posted @ 2022-08-14 13:03 BNTang 阅读(200) 评论(0) 推荐(0) 编辑
摘要:聚合管道阶段 $lookup: 用来做关联查询 格式: {$lookup:{ from: 关联集合名称, localField: 当前集合中的字段名称, foreignField:关联集合中的字段名称, as: 输出字段的名称 }} 添加测试数据: db.person.insert([ {name: 阅读全文
posted @ 2022-07-24 22:19 BNTang 阅读(507) 评论(0) 推荐(0) 编辑
摘要:聚合管道阶段 $sort: 和文档游标 sort 方法一样, 对文档进行排序 格式: {$sort: {<field>>:1|-1}} db.person.aggregate([ { $sort:{ age: -1 } } ]); 取值就是 1,-1,代表着 升序,降序。 阅读全文
posted @ 2022-07-24 15:34 BNTang 阅读(236) 评论(0) 推荐(0) 编辑
摘要:聚合管道阶段 $unwind: 展开数组字段 格式: {$unwind:{path:<field>}} 在测试之前首先添加数据: db.person.update({'name.firstName':'Jonathan'}, {$set:{tags:['html', 'js']}}); db.per 阅读全文
posted @ 2022-07-24 15:23 BNTang 阅读(494) 评论(0) 推荐(0) 编辑
摘要:聚合管道阶段 limit:limit,:$limit:<number>db.person.aggregate([$limit:1]);skip: 和游标的 skip 方法一样, 用于指定跳过几个文档 格式: {$skip:<n 阅读全文
posted @ 2022-07-23 22:43 BNTang 阅读(96) 评论(0) 推荐(0) 编辑
摘要:聚合管道阶段 $match 和 find 方法中的第一个参数一样, 用于筛选符合条件的文档 格式: {$match:{<query>}} db.person.aggregate([ { $match: { 'name.firstName': 'Amelie' } } ]); 使用技巧 应该在聚合操作 阅读全文
posted @ 2022-07-23 22:42 BNTang 阅读(1015) 评论(0) 推荐(0) 编辑
摘要:什么是聚合操作 聚合操作就是通过一个方法完成一系列的操作 在聚合操作中, 每一个操作我们称之为一个阶段 聚合操作会将上一个阶段处理结果传给下一个阶段继续处理 所有阶段都处理完毕会返回一个新的结果集给我们 聚合操作格式 db.<collection>.aggregate(<pipeline>, <op 阅读全文
posted @ 2022-07-23 11:39 BNTang 阅读(720) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示