MongoDB find查询语句详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43886133/article/details/95635071

与SQL查询对比

作用 SQL MongoDB
所有记录 SELECT * FROM users db.users.find()
age=18的记录 SELECT * FROM users WHERE age=33 db.users.find({age:18})
子键(字段)筛选 SELECT a, b FROM users WHERE age=18 db.users.find({age:18}, {a:1,b:1})
排序 SELECT * FROM users WHERE age=18 ORDER BY name db.users.find({age:18}).sort({name:1})
比大小 SELECT * FROM users WHERE age>18 db.users.find({‘age’:{$gt:18}})})
正则(模糊匹配) SELECT * FROM users WHERE name LIKE “Joe%” db.users.find({name:/^Joe/})
忽略、限制 SELECT * FROM users LIMIT 10 20 db.users.find().limit(10).skip(20)
Or操作 SELECT * FROM users WHERE a=1 or b=2 db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
仅返回1条(TOP 1) SELECT * FROM users LIMIT 1 db.users.findOne()
Distinct聚合 SELECT DISTINCT last_name FROM users db.users.distinct(‘last_name’)
Count聚合 SELECT COUNT(AGE) from users db.users.find({age: {’$exists’: true}}).count()
查询计划 EXPLAIN SELECT * FROM users WHERE z=3 db.users.find({z:3}).explain()

子健筛选

  • 包含所有子健
db.users.find({age:18})
  • 仅包含子健:_id age gender
db.users.find({age:18}, {age:1, gender:1})
  • 仅包含子健:_id age
db.users.find({age:18}, {age:1, gender:0})
  • 剔除 _id (除_id以外所有的值)
db.users.find({age:18}, {_id:0})

复杂查询

mongdb 支持比较查询 (大于小于, or, not等)

  • 返回年龄大于等于18岁小于25岁的username
db.users.find({ age: {'$gte': 18, '$lt': 25}});
  • 返回大于18岁,且不等于25岁的username
db.users.find({age: {'$gt': 18, '$ne': 25}});
  • 返回等于18岁 或者等于25岁的username
db.users.find({'$or':[ {'age': 28},{'age': 25} ]});

查询条件操作符

id 操作符 解释 示例
1 $lt, l t e lte, gt, $gte <, <=, >, >= db.things.find({“a”:{$gt: value}});
2 $all 数组中的元素是否完全匹配 db.things.find({a: {$all: [2, 3]}});
3 $exists 可选:true,false db.things.find({a: {$exists: true}});
4 $mod 取模:a % 10 == 1 db.things.find({a: {$mod: [10, 1]}});
5 $ne 取反:即not equals db.things.find( { x : { $ne : 3 } } );
6 $in 类似于SQL的IN操作 db.things.find({j:{$in: [2,4,6]}});
7 $nin $in的反操作,即SQL的 NOT IN db.things.find({j:{$nin: [2,4,6]}});
8 $nor $or的反操作,即不匹配(a或b) db.things.find({name: “bob” , $nor: [{a: 1}, {b: 2}]})
9 $or Or子句,注意$or不能嵌套使用 db.things.find({name: “bob”, $or:[{a: 1 }, {b: 2}]})
10 $size 匹配数组长度 db.things.find({a: {$size: 1}});
11 $type 匹配子键的数据类型,详情请看 db.things.find({a : {$type: 2}});

正则表达式

正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串.
MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式 或者类似于 /^.+/这样的正则表达式
实例数据 fsp_yjh

{
    "_id" : "60b17a85b98a35539601d5de0d76eae9",
    "department" : "中国银行业监督管理委员会",
    "gtime" : 1558345756, # 获取日期
    "ctime": 1548345756, # 发布日期
    "stime" : "201905201749",
    "branch" : "乌兰察布银保监分局",
    "punish_obj": ["张某", "李某"], # 处罚对象
    "branch_tree" : {
        "level_0" : "中国银行业监督管理委员会",
        "level_1" : "内蒙古监管局",
        "level_2" : "乌兰察布银保监分局"
        },
    "group_key" : "内蒙古监管局"
}

实例数据 book

{
    "_id" : "f6708ecc739136018c7f63daf86b961d",
    "book_name" : "Python学习手册(原书第5版)",
    "introduction": "Python入门必读之作,位列美亚软件编程畅销榜首,《Python编程》姊妹篇 覆盖Python 3.3和Python2.7两个版本,详细讲解各种语言特性,并新增大量示例",
    "gtime" : 1558345756, # 获取日期
    "ctime": 1548345756, # 发布日期
    "price" : "145",
    "author" : "[美]马克·卢茨",
}
  • 正则表达式 查询 branch 中包含有银保监分局的所有文档
db.fsp_yjh.find({"branch": {$regex:"银保监分局"}})
  • 不区分大小写的正则表达式 设置参数 $options 为 $i
db.book.find({"book_name": {$regex:"python",$options:"$i"}})
  • 也可以使用 / / 上个查询等同于
db.book.find({"book_name": /python/i})

子项查询

  • 返回 fsp_yjh 中punish_obj 为第2项为’李某’的所有文档
db.fsp_yjh.find({"punish_obj.1": "李某"})
  • 返回 fsp_yjh 中branch_tree 的level_2 为 ‘乌兰察布银保监分局’ 的所有文档
db.fsp_yjh.find({"branch_tree.level_2": "乌兰察布银保监分局"})

排序分页

  • limit: 限制返回结果的项目数量的上限; 可以理解为每页最多N项
  • skip: 在返回时略过的项目数量的上限; 可以变通的实现翻页
  • sort: 指定排序方式; 可以支持多键
  • 例子:department 为’中国银行业监督管理委员会’ 返回10条数据,略过第100项, 按照gtime降序, ctime增序
db.fsp_yjh.find({"department" : "中国银行业监督管理委员会"}).limit(10).skip(100).sort({"gtime": -1, "ctime": 1})

猜你喜欢

转载自blog.csdn.net/weixin_43886133/article/details/95635071