文章摘要
### 简明总结
MongoDB的聚合查询功能通过管道($管道)实现,主要用于对集合中的文档进行复杂操作和分析。聚合查询语法包括以下几个主要部分:
1. **$match**:用于过滤符合条件的文档。
2. **$group**:将集合中的文档分组并应用聚合操作(如计数、求和等)。
3. **$project**:修改文档结构,包括增加、删除或重新命名字段。
4. **$sort**:按指定字段对文档进行排序。
5. **$limit**:限制返回的文档数量。
6. **$skip**:跳过指定数量的文档后返回后续文档。
此外,聚合查询还支持常用操作符如模糊查询(通过正则表达式匹配字段值)、多条件查询以及关联查询(通过MongoDB的关联操作符进行关联)。通过这些功能,可以实现数据统计、排序、过滤、字段重命名等功能,广泛应用于数据分析和复杂查询场景。
### 关键点
- 聚合查询语法简单,功能强大,适合处理复杂数据操作。
- 管道式表达使得查询逻辑清晰易懂。
- 常用操作符和聚合函数支持灵活的数据操作和分析。
### 应用价值
- 简化复杂查询逻辑,提升数据分析效率。
- 支持数据统计、排序、过滤等操作,满足多种业务需求。
- 管道式结构使得代码可读性和可维护性更高。
以上总结概括了MongoDB聚合查询的核心功能和应用场景,为读者提供了快速了解聚合查询的入门指南。
目录普通查询按照所需字段排序查询数据库表的全部内容精确查询只返回所需要的字段信息比较查询关联查询多条件模糊查询聚合常用管道常用表达式$group$match$project$sort$limit$skip先写skip,再写limit总结
db_set.find().sort(“field_name “,pymongo.ASCENDING) –升序
db_set.find().sort(“field_name “,pymongo.DESCENDING) –降序
db_set.find().sort(“field_name “,pymongo.DESCENDING) –降序
# 第一种:
db_set.find({})
#第二种:
db_set.find()
db_set.find({})
#第二种:
db_set.find()
db_set.find({“field_name”:”value”})
db_set.find({“field_name”:”value”, “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()
如果只想查询一个键的多个值,或取除某个值之外所有的数据那么就用到了, $in和$nin
#比如我只想获取field_name为1,5,8的数据:
db_set.find()
db_set.find()
$regex为模糊查询的字符串提供正则表达式功能
db_set.find()
语法格式:db.集合名称.aggregate([{管道:{表达式}}])
list_a=list(ROLE_TREE.aggregate([
]
]
:将集合中的文档分组,可用于统计结果:过滤数据,只输出符合条件的文档:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果:将输入文档排序后输出:限制聚合管道返回的文档数:跳过指定数量的文档,并返回余下的文档
:计算总和,$sum:1同count表示计数:计算平均值:获取最小值:获取最大值:在结果文档中插入值到一个数组中:根据资源文档的排序获取第一个文档数据:根据资源文档的排序获取最后一个文档数据
将集合中的文档分组,可用于统计结果 ,_id表示分组的依据,使用某个字段的格式为’$字段’
list(ROLE_TREE.aggregate([
]))
# “counter”为自定义名称,用来存储结果的变量
Group by null:将集合中所有文档分为一组
list_a=list(ROLE_TREE.aggregate([
]
]
用于过滤数据,只输出符合条件的文档,使用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=[]
{‘$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=[]
修改输入文档的结构,如重命名、增加、删除字段、创建计算结果(类似查找中投影,值为1表示显示,值为0不显示)
list_a=list(ROLE_TREE.aggregate([
]
]
将输入文档排序后输出 ,1 升序 -1降序
list_a=list(ROLE_TREE.aggregate([
{‘$sort’: {‘update_time’: 1}},
]
{‘$sort’: {‘update_time’: 1}},
]
限制聚合管道返回的文档数
list_a=list(ROLE_TREE.aggregate([
]
]
跳过指定数量的文档,并返回余下的文档
list_a=list(ROLE_TREE.aggregate([
]
]
list_a=list(ROLE_TREE.aggregate([
]
]
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:pymongo中聚合查询的使用方法详解Pymongo常用查询方法总结python学习pymongo模块的使用方法
© 版权声明
文章版权归作者所有,未经允许请勿转载。