PyMongo 查询数据

这是我参与更文挑战的第28天,活动详情查看:更文挑战

如果❤️我的文章有帮助,欢迎评论、关注、点赞。这是对我继续技术创作最大的鼓励。更多往期文章在我的个人博客

查询数据

往 mongodb存储的所有数据,都是为了需要读取的时候能够取出。

但读取除了按某一列比如分数: 排序 读取;还会出现我只看某一段时间、某个班的条件筛选;还会出现我想看每个班平均分 聚合平均….等等多样操作

这些操作都可以通过 find_one()find() 完成:

ret2find = collect.find_one()
# {'_id': ObjectId('5ea780bf747e3e128470e485'), 'class_name': '高三(1)班', 'student_name': '张三', 'subject': '英语', 'score': 100, 'date': '20200301'}

ret2find = collect.find()
# <pymongo.cursor.Cursor object at 0x0000024BBEBE15C8>
复制代码

从上面的结果可以看出,find_one() 查询得出单一字典;find()则是一个生成器对象能够通过 for val in ret2find: 遍历取出

设置查询条件

但能取出全部数据还不够,查询一般是会带条件、甚至复杂的条件 —— 比如:查询出 高三(1)班,张三 或 李四,成绩大于90 的科目,该怎么做呢?

ret2find = collect.find({"class_name":"高三(1)班","score":{"$gt":90},"$or":[{"student_name":"张三"},{"student_name":"李四"}]})

for val in ret2find:
    print(val)
复制代码

上面有两个要点:

{“class_name”:”高三(1)班”,”score”:{“$gt”:90}}

这一段 写法 表示 “高三(1)班 分数 > 90”;

$gt 比较操作符,表 大于意思,除 $gt 操作符以外还有:

符号 含义
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$ne 不等于
$in 在范围内
$nin 不在范围内

{“$or”:[{“student_name”:”张三”},{“student_name”:”李四”}]}

这一段 写法 表示 “学生名称为 张三 李四”

而其中的 $or 逻辑操作符,用它来表示条件之间的关系。除了 $or 以外的逻辑操作符还有:

符号 含义
$and 按条件取 交集
$not 单个条件的 相反集合
$nor 多个条件的 相反集合
$or 多个条件的 并集

更多查询操作

除了上述常规操作外,具体使用场景中我们还会用到:

符号 含义 示例 示例含义
$regex 正则匹配 {“student_name”:{“regex:.regex”:”.*三“}} 学生名以 “三” 结尾
$expr 允许查询中使用 聚合表达式 {“expr”:{“gt”:[“spent,spent”,”budget”]}} 查询 花费 大于 预算 的超支记录
$exists 属性是否存在 {“date”:{“$exists”: True}} date属性存在
$exists 属性是否存在 {“date”:{“$exists”: True}} date属性存在
$type 类型判断 {“score”:{“$type”:”int”}} score的类型为int
$mod 取模操作 {‘score’: {‘$mod’: [5, 0]}} 分数取5、0的模

更多 查询操作符 可以点击 查看官方文档

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享