版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上版权声明,转载时请务必注明作者。
https://blog.csdn.net/weixin_43453386/article/details/84956751
MongoDB——》基础查询(基本、比较运算符、逻辑运算符、范围、正则、数组、排序、投影、限数、去重、统计)
db:当前数据库名
test:当前集合名
一、基本查询:find
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | find | 查询 | db.test.find({条件}) |
2 | findOne | 查询:一个 | db.test.findOne({条件}) |
3 | pretty | 查询结果格式化 | db.test.find({条件}).pretty() |
二、比较运算符查询:$lt、$lte、$gt、$gte、$ne
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | $lt | < | # 查询年龄小于18db.test.find({age:{$lt:18}}) |
2 | $lte | <= | # 查询年龄小于等于18db.test.find({age:{$lte:18}}) |
3 | $gt | > | # 查询年龄大于18db.test.find({age:{$gt:18}}) |
4 | $gte | >= | # 查询年龄大于等于18db.test.find({age:{$gte:18}}) |
5 | $ne | != | # 查询年龄不等于18db.test.find({age:{$ne:18}}) |
三、逻辑运算符查询:$or
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | 与 | # 查询年龄小于18并且名字是小花db.test.find({age:{$lt:18},name:"小花"}) | |
2 | $or | 或 | # 查询年龄小于18或者名字是小花db.test.find({$or:[{age:{$lt:18}},{name:"小花"}]}) |
3 | 或、与 | # 查询年龄小于18或者名字是小花,并且性别为男db.test.find({$or:[{age:{$lt:18}},{name:"小花"}],sex:"男"}) |
四、范围查询:$in、$nin、$not
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | $in | 在范围内 | # 查询年龄为18,28db.test.find({age:{$in:[18, 28]}}) |
2 | $nin | 不在范围内 | # 查询年龄不为18,28db.test.find({age:{$nin:[18, 28]}}) |
3 | $not $in | 不在范围内 | # 查询年龄不为18,28db.test.find({age: {$not: {$in:[18,28]}}}) |
4 | $not | 不等于 | # 查询名字不以T开头的db.test.find({name: {$not: /^T.*/}}); |
五、正则查询
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | # 模糊查询db.test.find({name:/李/}) # 模糊查询:以"李" 开头 db.test.find({name:/^李/}) # 模糊查询:以"李" 结尾 db.test.find({name:/李$/}) # 模糊查询:忽略大小写 db.test.find({name:/stephen?/i}) |
六、数组查询
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | # 数组查询:数组中所有包含bananadb.test.find({"fruit":"banana"}) # 数组查询:同时包含bananat和apple(顺序无关紧要) db.test.find({"fruit": {"$all": ["banana","apple"]}}) # 数组查询:精确匹配(数据必须和查询条件完全匹配,顺序也必须保持一致) db.test.find({"fruit":["apple","banana","peach"]}) # 数组查询:下标(数组的起始下标是0) db.test.find({"fruit.2":"peach"}) | ||
2 | $size | 数组长度 | # 数组查询:长度db.test.find({"fruit": {$size : 3}}) |
七、排序:sort
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | sort | 排序:1升序,-1降序 | # 按年龄降序,按名称升序db.test.find({}).sort({age:-1,name:1}) |
八、投影
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | 选择显示的字段:1显示,0不显示 (_id列是默认显示的) | # 只显示年龄和名称(默认返回_id)db.test.find({},{name:1,age:1}) # 只显示年龄和名称(不返回_id) db.test.find({},{_id:0,name:1,age:1}) |
九、限制指定条数、跳过指定条数:limit、skip
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | limit | 读取指定数量 | # 查询年龄为18的2条数据db.test.find({age:18}).limit(2) |
2 | skip | 跳过指定数据 | # 查询年龄为18,并跳过2条数据db.test.find({age:18}).skip(2) |
3 | limit、skip | 当查询时同时使用sort,skip,limit, 无论位置先后, 最先执行顺序 sort再skip再limit skip和limit方法只适合小数据量分页, 如果是百万级效率就会非常低, 因为skip方法是一条条数据数过去的 | # 查询年龄为18,并跳过2条数据,再取2条数据db.test.find({age:18}).limit(2).skip(2) db.test.find({age:18}).skip(2).limit(2) |
十、去重:distinct
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | distinct | 去重 | # 查询年龄为18,并且城市不重复的数据db.test.distinct("city",{age:18}) |
十一、统计:count
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | count | 计数 | # 查询年龄为18的总数db.test.find({age:18}).count() |
十二、字段是否存在:$exists
序号 | 关键字 | 说明 | 查询语句 |
---|---|---|---|
1 | $exists | 字段是否存在:true存在,false不存在 | # 查询包含age字段的数据db.test.find({age: {$exists: true}}) |
2 | 值为null,或字段不存在 | # 查询age字段不存在或者值为null的数据 db.test.find({age:null}) |