python-pymongo常用查询方法含聚合问题

 更新时间:2023年05月08日 09:28:48   作者:L'y  
这篇文章主要介绍了python-pymongo常用查询方法含聚合问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

普通查询

按照所需字段排序

db_set.find().sort("field_name ",pymongo.ASCENDING) --升序
db_set.find().sort("field_name ",pymongo.DESCENDING) --降序

查询数据库表的全部内容

# 第一种:
 db_set.find({})
#第二种:
db_set.find()

精确查询

db_set.find({“field_name”:”value”})
db_set.find({“field_name”:”value”, “field_name”:”value”})

只返回所需要的字段信息

find的第二参数可以帮助我们只把需要的键值信息返回,需要将我们需要的键指定为1,另外默认的”_id”默认是返回的,我们不需要它返回的话将它的值设为0

db_set.find({}, {“field_name_one”:1, “field_name_two”:1,”_id”:0})

比较查询

首先 $lt和<,$lte和<=,$gt和>,gte和>=,ne和!=是一一对应的

db_set.find({"field_name": {"$lt": value, "$gt": value}})

关联查询

如果只想查询一个键的多个值,或取除某个值之外所有的数据那么就用到了, $in和$nin

#比如我只想获取field_name为1,5,8的数据:
db_set.find({"field_name": {"$in": [1,5,8]}})
#如果想获取field_name为5之外的所有数据:
db_set.find({"field_name": {"$nin": [5]}})

多条件模糊查询

$regex为模糊查询的字符串提供正则表达式功能

db_set.find({"$or": [{"field_name": {'$regex': value}},{"field_name": {'$regex': value}}]})

聚合

语法格式:db.集合名称.aggregate([{管道:{表达式}}])

list_a = list(ROLE_TREE.aggregate([
    {"$group":
        {
            "_id": '$update_time',  # 我想查询的字段
            "counter": {"$sum": 1}  # 产生的数量
        }
    }
]))
print(list_a)
res= [{'_id': 1649238526, 'counter': 1}, {'_id': 1649405332, 'counter': 1}, {'_id': 1649405568, 'counter': 1}, {'_id': 1649237591, 'counter': 1}, {'_id': 1649237314, 'counter': 1}, {'_id': 1649405347, 'counter': 1}]

常用管道

  • $group:将集合中的文档分组,可用于统计结果
  • $match:过滤数据,只输出符合条件的文档
  • $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
  • $sort:将输入文档排序后输出
  • $limit:限制聚合管道返回的文档数
  • $skip:跳过指定数量的文档,并返回余下的文档

常用表达式

  • $sum:计算总和,$sum:1同count表示计数
  • $avg:计算平均值
  • $min:获取最小值
  • $max:获取最大值
  • $push:在结果文档中插入值到一个数组中
  • $first:根据资源文档的排序获取第一个文档数据
  • $last:根据资源文档的排序获取最后一个文档数据

$group

将集合中的文档分组,可用于统计结果 ,_id表示分组的依据,使用某个字段的格式为’$字段’

list(ROLE_TREE.aggregate([
    {"$group":
        {
            "_id": '$update_time',  # 我想查询的字段
            "counter": {"$sum": 1}  # 产生的数量
        }
    }
]))
# "counter"为自定义名称,用来存储结果的变量

Group by null:将集合中所有文档分为一组

list_a = list(ROLE_TREE.aggregate([
    {"$group":
        {
            "_id": None,  # 为空
            "counter": {"$sum": 1}  # 产生的数量
        }
    }
]))
res = [{'_id': None, 'counter': 6}]

$match

用于过滤数据,只输出符合条件的文档,使用MongoDB的标准查询操作

list_a = list(ROLE_TREE.aggregate([
    {'$match': {'update_time': {'$lt': int(time.time())}}}, # 查找
    {'$group': {'_id': '$update_time', 'counter': {'$sum': 1}}} # 分组
]))
res= [{'_id': 1649405332, 'counter': 1}, {'_id': 1649405347, 'counter': 1}, {'_id': 1649237314, 'counter': 1}, {'_id': 1649237591, 'counter': 1}, {'_id': 1649405568, 'counter': 1}, {'_id': 1649238526, 'counter': 1}]
# ---------------------------------
list_a = list(ROLE_TREE.aggregate([
    {'$match': {'update_time': int(time.time())}},  # 查找
    # {'$group': {'_id': '$update_time', 'counter': {'$sum': 1}}} # 分组
]))
res = []

$project

修改输入文档的结构,如重命名、增加、删除字段、创建计算结果(类似查找中投影,值为1表示显示,值为0不显示)

list_a = list(ROLE_TREE.aggregate([
    {"$project": {"_id": 1, "create_time": 1, 'org_id': 1}},  # _id  一定在前
    {'$group': {'_id': '$create_time', 'counter': {'$sum': 1}}}  # 分组
]))
res = [{'_id': 1649237314, 'counter': 1}, {'_id': 1649405347, 'counter': 1}, {'_id': 1649405568, 'counter': 1}, {'_id': 1649238526, 'counter': 1}, {'_id': 1649405332, 'counter': 1}, {'_id': 1649237591, 'counter': 1}]

$sort

将输入文档排序后输出 ,1 升序 -1降序

list_a = list(ROLE_TREE.aggregate([
    {'$sort': {'update_time': 1}},
    {"$project": {"_id": 0, 'update_time': 1}}
]))
res = [{'update_time': 1649237314}, {'update_time': 1649237591}, {'update_time': 1649238526}, {'update_time': 1649405332}, {'update_time': 1649405347}, {'update_time': 1649405568}]

$limit

限制聚合管道返回的文档数

list_a = list(ROLE_TREE.aggregate([
    {"$limit": 2},
    {"$project": {'_id': 1}}
]))
res=  [{'_id': '8796e0d2a75ee0d84c1fbcb5ac4e7cc5'}, {'_id': 'bbd7664aa4b1d7fbfaa0256b05a78fd1'}]

$skip

跳过指定数量的文档,并返回余下的文档

list_a = list(ROLE_TREE.aggregate([
    {"$skip": 3},  # 跳过
    {"$project": {'_id': 1}}
]))
res = [{'_id': '26702db7682ef817047b9681cd685987'}, {'_id': 'b64f271c735c8a57b34a0feefd292d65'}, {'_id': '5974aaaf7848fd8af6426cad375c4b62'}]

先写skip,再写limit

list_a = list(ROLE_TREE.aggregate([
    {"$skip": 1},  # 跳过
    {"$limit": 1},  # 分组数量
    {"$project": {'_id': 1}}
]))
res = [{'_id': 'bbd7664aa4b1d7fbfaa0256b05a78fd1'}]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python列表推导式的使用方法

    Python列表推导式的使用方法

    这篇文章主要介绍了Python列表推导式的使用方法,大家参考使用吧
    2013-11-11
  • python动态加载技术解析

    python动态加载技术解析

    这篇文章主要介绍了python动态加载技术解析,说简单点就是,如果开发者发现自己的代码有bug,那么他可以在不关闭原来代码的基础之上,动态替换模块替换方法一般用reload来完成,需要的朋友可以参考下
    2023-07-07
  • Python selenium文件上传下载功能代码实例

    Python selenium文件上传下载功能代码实例

    这篇文章主要介绍了Python selenium文件上传下载功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Python使用sqlalchemy实现连接数据库的帮助类

    Python使用sqlalchemy实现连接数据库的帮助类

    这篇文章主要为大家详细介绍了Python如何使用sqlalchemy实现连接数据库的帮助类,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考下
    2024-02-02
  • 解决tensorflow由于未初始化变量而导致的错误问题

    解决tensorflow由于未初始化变量而导致的错误问题

    今天小编就为大家分享一篇解决tensorflow由于未初始化变量而导致的错误问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 利用 Python 实现随机相对强弱指数 StochRSI

    利用 Python 实现随机相对强弱指数 StochRSI

    随机相对强弱指数简称为StochRSI,是一种技术分析指标,用于确定资产是否处于超买或超卖状态,也用于确定当前市场的态势。本篇文章小编九来为大家介绍随机相对强弱指数简称为StochRSI,需要的朋友可以参考下面文章的具体内容
    2021-09-09
  • python 有效的括号的实现代码示例

    python 有效的括号的实现代码示例

    这篇文章主要介绍了python 有效的括号的实现代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案

    python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案

    这篇文章主要介绍了python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • python多线程中获取函数返回值的三种方法

    python多线程中获取函数返回值的三种方法

    本文主要介绍了python多线程中获取函数返回值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python 批量读取文件中指定字符的实现

    Python 批量读取文件中指定字符的实现

    这篇文章主要介绍了Python 批量读取文件中指定字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论