Mongodb数据查询 | Mongodb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | 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 }}) |
标签:
mongodb
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
2017-06-19 Android深入理解JNI(一)JNI原理与静态、动态注册