博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mongodb数据查询 | Mongodb
阅读量:5052 次
发布时间:2019-06-12

本文共 6031 字,大约阅读时间需要 20 分钟。

1.基本查询    ①方法find():查询        db.集合名称.find({条件文档})    ②方法findOne():查询,只返回第一个        db.集合名称.findOne({条件文档})    ③方法pretty():将结果格式化        db.集合名称.find({条件文档}).pretty()2.比较运算符    # 等于,默认是等于判断,没有运算符    # 小于,$lt   less-than    # 小于或等于,$lte   less-than,equal    # 大于,$gt    greater-than    # 小于或等于,$gte    greater-than,equal    # 不等于,$ne    not equal          db.collection2.find({name:'郭靖'})        db.collection2.find({age:{$gte:18}})3.逻辑运算符    ①逻辑与        # 默认是逻辑与的关系        # 例:查询年龄大于或等于18,并且性别为true的学生            db.collection2.find({age:{$gte:18}, gender:true})    ②逻辑或        # 使用$or,值为数组,数组中每个元素为json        # 例:查询年龄大于18,或性别为false的学生            db.collection2.find({$or:[{age:{$gt:18}},{gender:false}]})        注意点:find() >> 或条件下的{} >> $or[ ] >>        >>  {条件a},{条件b} >> {域:{ 逻辑符判断} }    ③或、与共用        # 例:查询年龄大于18或姓名是郭靖,并且性别为男生            db.collection2.find( {$or:[ {age:{$gt:18} },{name:'郭靖'} ],gender:true} )4.范围运算符    # $in|$nin    # 例:查询年龄为18,28的学生        db.collection2.find( {age:{$in:[18, 28] } } )    # 这里要注意了,最大与最小都需要表中含有这几个数5.支持正则表达式    # 使用 // 或 $regex 编写正则表达式    # 例:db.collection2.find( {name:/^黄/} )        db.collection2.find( {name:{$regex:'^黄'} } )6.自定义查询    # 使用$where后面写一个函数,返回满足条件的数据    # 例:查询大于30岁的学生        db.collection2.find(        {        $where: function(){        return this.age > 18        }})7.Limit和Skip    ①方法limit():读取指定数量的文档        # db.集合名称.find().limit(NUMBER)        db.collection2.find().limit(2)        # 附:如果指定参数则显示集合中的所有文档    ②方法skip():用于跳过指定数量的文档        # db.集合名称.find().skip(NUMBER)        db.stu.find().skip(2)        # 附:参数NUMBER表示跳过的记录条数,默认为0    ③limit()与skip()一起使用        # 不分先后顺序;跳过指定数量文档,再读取指定数量的文档        # 查询数据        db.collection1.find().limit(4).skip(5)        db.collection1.find().skip(5).limit(4)8.投影    --选择字段显示数据        # ①db.集合名称.find({},{ 字段名称:1, ...})        db.collection2.find({},{name:1, gender:1})        # '1':表示显示字段,不设置表示不显示        # ②特殊:对于_id列默认是显示的,        # 如果不显示需要明确设置为0        db.collection2.find({},{_id:0,name:1,gender:1})9.排序    --对结果集进行排序        参数1为升序排列        参数-1位降序排列    # db.集合名称.find().sort({字段:1....})    # --根据性别降序,再根据年龄升序        db.collection2.find().sort({gender:-1,age:1})10.统计个数    ①方法count():用于统计结果集中文档条数        1.db.集合名称.find({条件}).count()        db.collection2.find({gender:true}).count()        # --统计男生人数        2.db.集合名称.count({条件})        db.collection2.count({age:{$gt:20}, gender:true})        # --统计年龄大于20的男生人数11.消除重复    ①方法distinct():对字段数据进行去重,提取    --db.集合名称.distinct('去重字段',{条件})    db.collection2.distinct('hometown',{age:{$gt:18}})    # 查询年龄大于18岁的学生,来自哪些省份# 4.聚合查询1.基本语法    --语法    db.集合名称.aggregate( {管道: {表达式} } )    附:        1.管道:在Unix和Linux中一般用于将当前命令的        输出结果作为下一个命令的输入        2.表达式:处理输入文档并输出2.常用表达式    $sum: 计算综合,$sum:1 表示以一倍计数    $avg: 计算平均值    $min: 获取最小值    $max: 获取最大值    $push: 在结果文档中插入值到第一个文档数据    $first: 根据资源文档的排序获取第一个文档数据    $last: 根据资源文档的排序获取最后一个文档数据3.常用管道    ①$group        --将集合中的文档分组,可用于统计结果        --_id表示分组的依据,使用某个字段的格式为'$字段'            # 统计男生、女生的总人数            db.stu.aggregate(                {$group:                    {                        _id:'$gender',                        counter:{$sum:1}                    }                }            )        --透视数据            # 统计学生性别及学生姓名            db.stu.aggregate(                {$group:                    {                        _id:'$gender',                        name:{$push:'$name'}                    }                }            )        --使用$$ROOT可以将文档内容加入到结果集的数组中            db.stu.aggregate(                {$group:                    {                        _id:'$gender',                        name:{$push:'$$ROOT'}                    }                }            )    ②$match        --修改输入文档的结构,如重命名、增加、删除字段、创建计算结果        --用于过滤数据,只输出符合条件的文档        --使用MongoDB的标准查询操作        # 查询年龄大于20的学生        db.stu.aggregate(            {$match:{age:{$gt:20}}}        )        # 查询年龄大于20的男生、女生人数        db.stu.aggregate(            {$match:{age:{$gt:20}}},            {$group:{_id:'$gender',counter:{$sum:1}}}        )    ③$project        --修改输入文档的结构,           如重命名、增加、删除字段、创建计算结果        # 查询学生的姓名、年龄        db.stu.aggregate(            {$project:{_id:0,name:1,age:1}}        )        # 查询男生、女生人数,输出人数        db.stu.aggregate(            {$group:{_id:'$gender',counter:{$sum:1}}},            {$project:{_id:0,counter:1}}        )    ④$sort        --将输入文档排序后输出        # 查询学生信息,按年龄升序        b.stu.aggregate({$sort:{age:1}})        # 查询男生、女生人数,按人数降序        db.stu.aggregate(            {$group:{_id:'$gender',counter:{$sum:1}}},            {$sort:{counter:-1}}        )    ⑤$limit和$skip        --$limit        # 限制聚合管道返回的文档数        # 查询2条学生信息            db.stu.aggregate({$limit:2})        --$skip        # 跳过指定数量的文档,并返回余下的文档        # 查询从第3条开始的学生信息            db.stu.aggregate({$skip:2})        # 统计男生,女生人数,按人数升序,取第2条数据            db.stu.aggregate(                {$group:{_id:'$gender', counter:{$sum:1}}}                {$sort:{counter:1}}                {$skip:1}                {$limit:1}            )    ⑥$unwind字段拆分查询        --语法        --文档中一个数组字段含有多个值        --根据字段下的值拆分多条        --每条包含数组中的一个值                   --db.集合名称.aggregate({$unwind:'$字段名称'})            # $unwind聚合方法下含有两个属性:                path:'$字段名称'                preserveNullAndEmptyArrays:
<布尔值>
# 不填写属性,默认表示
<布尔值>
为false # 且不用标记属性名 --构造数据 db.t3.insert([ { "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] }, { "_id" : 2, "item" : "b", "size" : [ ] }, { "_id" : 3, "item" : "c", "size": "M" }, { "_id" : 4, "item" : "d" }, { "_id" : 5, "item" : "e", "size" : null } ]) --查看查询结果,显示对空数组,无字段,null的文档 db.t3.aggregate( { $unwind:{ path:'$size', preserveNullAndEmptArrays:true}}) --查看查询结果,不显示空数组,无字段,null的文档 db.t3.aggregate({$unwind: '$size'}) 相当于: db.t3.aggregate({$unwind:{path:'$size', preserveNullAndEmptyArrays:false}})

  

转载于:https://www.cnblogs.com/jianweilailai/p/9198769.html

你可能感兴趣的文章
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
ACdream 1115 Salmon And Cat (找规律&amp;&amp;打表)
查看>>
JSON、JSONP、Ajax的区别
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
css3动画——基本准则
查看>>
javaweb常识
查看>>
Java注解
查看>>
web自己主动保存表单
查看>>
一个小的日常实践——高速Fibonacci数算法
查看>>
机器学些技法(9)--Decision Tree
查看>>
drf权限组件
查看>>
输入月份和日期,得出是今年第几天
查看>>