Python技术栈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 8095|回复: 100

[笔记资料] 关于mongodb数据库的基本查询

  [复制链接]

2

主题

2

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2018-12-14 09:10:24 | 显示全部楼层 |阅读模式
本帖最后由 CraigDavid 于 2018-12-14 09:17 编辑

准备数据
[Python] 纯文本查看 复制代码
db.stu.insert({name:'郭靖',hometown:'蒙古',age:20,gender:true})
db.stu.insert({name:'黄蓉',hometown:'桃花岛',age:18,gender:false})
db.stu.insert({name:'杨康',hometown:'大金',age:20,gender:true})
db.stu.insert({name:'穆念慈',hometown:'大宋',age:18,gender:false})
db.stu.insert({name:'东邪',hometown:'桃花岛',age:40,gender:true})
db.stu.insert({name:'西毒',hometown:'西域',age:41,gender:true})
db.stu.insert({name:'南帝',hometown:'大理',age:42,gender:true})
db.stu.insert({name:'北丐',hometown:'大宋',age:45,gender:true})
db.stu.insert({name:'小甲',hometown:'大宋',age:45,gender:false})
db.stu.insert({name:'中神通',hometown:'全真教',age:44,gender:true})


基本查询
  • 方法 find()

    db.集合名称.find({条件文档})
  • 方法 findOne() 查询,只返回第一个

    db.集合名称.findOne({条件文档})

  • 方法pretty() 将结果格式化

    db.集合名称.find({条件文档}).pretty()

    比较运算符

  • 等于,默认就是等于判断,没有运算符

    db.stu.find({age:18}) //查询所有年龄是18的同学

  • 小于:$lt

    db.stu.find({age:{$lt:18}})        //查询年龄小于18的同学

  • 小于等于:$lte

    db.stu.find({age:{$lte:18}})        //查询年龄小于等于18的同学

  • 大于: $gt

    db.stu.find({age:{$gt:18}})        //查询年龄大于18的同学

  • 大于等于: $gte

    db.stu.find({age:{$gte:18}})  //查询大于等于18的同学

  • 不等于: $ne

    db.stu.find({age:{$ne:18}})   //查询年龄不等于18的同学



逻辑运算符
  • 查询时有多个条件,多个条件之间需要通过逻辑运算符来连接

  • 逻辑与:默认的是逻辑与的关系




[Python] 纯文本查看 复制代码
// 查询年龄大于或等于18,并且性别为true的学生
db.stu.find({age:{$gte:18},gender:true})

  • 逻辑或:使用$or,值为数组,数组中每个元素为json




[Python] 纯文本查看 复制代码
// 查询年龄大于18,或性别为false的学生
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

  • and和or一起使用

    [Python] 纯文本查看 复制代码
    // 查询年龄大于18或性别为true的学生,并且学生的姓名为郭靖
    db.stu.find({$or:[{age:{$ge:18}},{gender:true}],name:'郭靖'})
    


    范围运算符


  • 使用$in,$nin判断是否在某个范围内



    正则表达式查询
[Python] 纯文本查看 复制代码
// 查询年龄为18,28的学生
db.stu.find({age:{$in:[18,28]}})

  • mongodb提供的终端shell,同时也是一个js的执行器,可以编写js的代码和函数

  • 使用//或$regex编写正则表达式




[Python] 纯文本查看 复制代码
// 查询姓黄的同学
db.stu.find({name:/^黄/})
db.stu.find({name:{$regex:'^黄'}})

自定义查询
  • 使用$where后面写一个函数,返回满足条件的数据




[Python] 纯文本查看 复制代码
db.stu.find(
	{
      $where: function(){
        return this.age>30
      }
	}
)

Limit和skip
  • limit():用于读取指定数量的文档

    db.集合名称.find().limit(number)
    • 参数number:表示要读取文档的条数
    • 没有指定Number则显示集合中所有文档
    [Python] 纯文本查看 复制代码
    // 显示前两条学生的信息
    db.stu.find().limit(3)
    



  • skip:用于跳过指定数量的文档

    db.集合名称.find().skip(number)
    • 参数number表示跳过的记录条数,默认值为0
  • limit和skip可以一起使用,不分先后顺序。


投影
  • 在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段

  • 语法:

    [Python] 纯文本查看 复制代码
    // 参数为字段与值,值为1表示显示,值为0不显示
    db.集合名称.find({},{字段名称:1,...})
    



  • 对于需要显示的字段,设置为1即可,不设置即为不显示

  • 特殊:对于_id列默认是显示的,如果不显示需要明确设置为0


排序
  • 方法sort(),用于对结果集进行排序

    db.集合名称.find().sort({字段:1,...})
  • 参数1为升序排列

  • 参数-1为降序排列




[Python] 纯文本查看 复制代码
// 排序 age  从小到大
db.stu.find({},{name:1,age:1}).sort({age:1})

统计个数
  • 方法count()用于统计结果集中文档条数


[Python] 纯文本查看 复制代码
db.集合名称.find({条件}).count()
db.集合名称.count({条件})

  • 例子




[Python] 纯文本查看 复制代码
// 统计age大于18 的总人数
db.stu.find({age:{$gt:18}}).count()
db.stu.count({age:{$gt:18}})

消除重复
  • 方法distinct()对数据进行去重

    db.集合名称.distinct('去重字段',{条件})
  • 例子:




[Python] 纯文本查看 复制代码
// 查找年龄大于18的学生,来自哪些省份
db.stu.distinct('hometown',{age:{$gt:18}})



Python 总 群
回复

使用道具 举报

0

主题

6

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2018-12-14 09:17:56 | 显示全部楼层
大人,此事必有蹊跷!
Python 总 群
回复

使用道具 举报

0

主题

2

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2018-12-14 22:49:54 | 显示全部楼层
元芳你怎么看?
Python 总 群
回复

使用道具 举报

0

主题

6

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2018-12-15 06:00:07 | 显示全部楼层
嘘,低调。
Python 总 群
回复

使用道具 举报

0

主题

7

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2018-12-15 07:06:23 | 显示全部楼层
路过 帮顶 嘿嘿
Python 总 群
回复

使用道具 举报

0

主题

7

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2018-12-15 09:25:25 | 显示全部楼层
我只是路过,不发表意见
Python 总 群
回复

使用道具 举报

0

主题

7

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2018-12-15 10:13:06 | 显示全部楼层
楼下的接上
Python 总 群
回复

使用道具 举报

0

主题

3

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2018-12-15 13:59:39 | 显示全部楼层
不错 支持一个了
Python 总 群
回复

使用道具 举报

0

主题

5

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2018-12-15 20:12:46 | 显示全部楼层
众里寻他千百度,蓦然回首在这里!
Python 总 群
回复

使用道具 举报

0

主题

7

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2018-12-15 21:11:37 | 显示全部楼层
学习下
Python 总 群
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


QQ|Archiver|手机版|小黑屋|Python.BBS ( 鲁ICP备18046958号 )

GMT+8, 2020-1-25 23:39 , Processed in 0.236370 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表