python-pymongo常用查询方法含聚合问题
作者:L'y 发布时间:2021-02-10 21:35:36
普通查询
按照所需字段排序
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'}]
来源:https://blog.csdn.net/Ly_Word/article/details/124141245
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 前言:处理图片需要,需把图片都转换成1920*1280的大小, python实现很方便,需要导入图片处理的Image包和匹配的glob包,很
- 1、将css与javascript全部用下边的方法分离到外部文件中去。<link rel="stylesheet"
- 需求在使用django admin时希望后台的Textarea多行文本框可以按yaml格式编写,数据库保存为Text文本类型,字段和接口中读
- 代码如下:<% Response.Buffer = True '一般情况下,当用户请求
- 需求:从服务器拷贝照片到本地,然后再从本地照片筛选照片。问题:从服务器拷贝到照片本地,太慢,速度只有20~30K,不能忍。然后想到,利用py
- 在odoo中,通过iframe嵌入 html,页面数据则通过controllers获取,使用jinja2模板传值渲染html页面分页内容,这
- 前言去年在做golangserver的时候,内部比较头疼的就是在线服务发布的时候,大量用户的请求在发布时候会被重连,在那时候也想了n多的方法
- 一、概念介绍箱型图(box-plot),又称为箱线图,盒型图,盒须图。在数据探索阶段或者描述性分析过程中,我们常常用于展示多类连
- 使用Python爬虫库requests多线程抓取猫眼电影TOP100思路:查看网页源代码抓取单页内容正则表达式提取信息猫眼TOP100所有信
- 定义切片区别于数组,是引用类型, 不是值类型。数组是固定长度的,而切片长度是可变的,我的理解是:切片是对数组一个片段的引用。var s1 [
- xlabel(‘time',‘FontSize',12);如果没有设置位置,默认是在中间在xlabel中也有position
- 我从11岁开始编程,并且一直都很喜欢技术和编程。这些是我一直以来获得的经验教训。作为一个程序员,你可能需要这样的忠告。我更希望每个人在获取这
- 发现问题当我用pip安装好opencv-pyton后,我激动得在python项目中导入cv2就像这样:import cv2 as cvbut
- 本文实例讲述了Python通过公共键对字典列表排序算法。分享给大家供大家参考,具体如下:问题:想根据一个或多个字典中的值来对列表排序解决方案
- 前言:Python主要有三种数据类型:字典、列表、元组。其分别由花括号,中括号,小括号表示。如:字典:dic={'a':12
- js 代码中经常会碰到 undefined 这种错误,下面本文分享一下为什么会发生这种错误以及如何处理这种错误,js 中如果通过 var 声
- 简单介绍NumPy系统是Python的一种开源的数组计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested
- python urllib urlopen()对象方法/代理的补充说明urllib 是 python 自带的一个抓取网页信息一个接口,他最主
- 1. DID(Differences-in-Differences)定义双重差分法,其主要被用于社会学中的政策效果评估。这种方法需要两个「差
- 序Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候。为了解决这些问题