mongodb 系列~查询

2021/4/11 19:32:47

本文主要是介绍mongodb 系列~查询,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一 背景介绍 mongodb是一款高效处理JSON数据的NOSQL数据库,最新版4.0+版本已然支持分布式事务,不过大多数公司的业务场景还是按照传统的做法,稳定与安全 二 版本选择 1 由于mongodb的版本迭代很快.最新版本已经4.0+,但是按照稳定性和可运维性,本文档采用的版本是3.4版本,采用不同版本可能会有相关改动,实际请参考官方文档 二 关于database 1 use db_name 有则切换 没有则创建   Show dbs 查看所有database 新创建的数据库并不能通过show dbs直接查看,需要创建一个含有数据的collections use db_name db.dropDatabase() 删除数据库 2 存在一些具有意义的数据库,所以不能创建重名,最基本的就是admin和local数据库,都有其作用  三 关于collection 1 概念: mongodb中的collection就相当于mysql的table 2 collection 构成 1 每一行存储的json数据就相当于mysql的row 2 每一行json数据的每个key就相当于mysql的row-field,每个value就相当于mysql的row-data 3 每个collection内部也有相应的索引,作用在field上 作用就是加速查询  四 关于collection的基本查询-语法(非聚合) db.collection.find({query},{projection}).pretty() pretty()为易于读取的方式 find()函数为核心的查询函数,我们可以理解为sql之中的select关键字,查询必定调用 query :可选,使用查询操作符指定查询条件 可以理解成为sql查询的where部分 projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值可以理解成 针对mysql类似的拆解 select a from col where c='dd' order by c select 为 部分1 指定find() where条件为部分2 指定成query select a为部分3 指定为projection order by c 为部分四,为find后的调用函数 sql查询的指定列返回值部分 五 query部分 说明:以下 字段名用column指定 条件判断值用 data代替 作用域关键字为 操作符 案例分别标注mysql和mongo的相关语法 六 比较操作符 语法符号: $gt 大于 $gte 大于等于 $lt小于 $lte小于等于 $ne 不等于 可以用来判断字符串的等值 语法标准: db.collection.find({column:{操作符:data,....}}) 语法案例 mongo db.col.find({likes : {$lt :200, $gt : 100}}) mysql Select * from col where likes>100 AND likes<200; 七 等值 语法标准: db.collection.find({column:data,....}) 语法案例 mongo db.col.find({likes:'100',c:200}) mysql select * from col where likes=100 and c=200 八 集合 语法符号: $in在集合 $nin 不在集合 $all 满足所有集合 这里的意思是说只有满足集合内部所有条件情况下才会返回结果.而$in只需要满足一个即可 语法标准: db.collection.find({column:{操作符:[data1,data2,data2]}}) 语法案例 mongo db.col.find({likes : {$in :[100,200,300]}}) mysql Select * from col where likes in( 100,200,300); 九 与和或 语法符号:$and 和关系 $or 或关系 语法标准: db.collection.find({操作符:[{},{},{}]}) {}内部为and需要连接的条件 or同理,可以简单理解为 将需要处理条件作为一个整体 用操作符包裹 语法案例 mongo db.col.find({$or: [ {$and:[{"state1":11},{"state2":22}]},{"value":{$gte:300}} ]}) mysql select * from col where (stat1=11 and stat2=22) or value>=300 十 正则表达式 语法符号:$regex 语法标准:db.collection.find({column:{操作符:"正则表达式"}) 语法案例: db.users.find({name: {$regex: /^B.*/}}); 十一 基础补充 1 ({column:null}) 判断为NULL 2 {"column":{$exists:true}} 判断是否存在 存在返回整行数据,不存在则返回空 3 {"column":{$in:[null],$exists:true}} 判断是否存在列名并且列名为空的条件 是1+2的组合 4 支持js查询和mod计算.因为不常用,所以需要用到请参考官方文档进行使用 十二 函数讲解 说明:此部分介绍的函数比如排序 限制条数返回等都是拼接在find()之后.可以理解为mysql where 条件之后的处理   十三 聚合函数 说明:此部分类似于mysql的聚合函数功能,主要作用于统计相关 语法符号:$group分组 分组包裹全部,因为是最后执行   基本语法 db.colletion.aggregate({$group:{}}) db.collection.aggregate(column:{$sum:1})   语法案例: mongo db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) mysql select by_user, count(*) from mycol group by by_user   十四 管道 说明:MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。 基本符号:$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结 果以及嵌套文档。 $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 并不完全,余下请参考文档 上面的$sort $limit和$group等 也都属于管道 基本语法: 处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。 十五 总结 对于复杂的SQL查询需求,按照拆解的方法来实现每个部分,然后利用相关的函数进行组合,最后达到你的目的,是非常不错的选择

这篇关于mongodb 系列~查询的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程