Python中MongoDB和Elasticsearch的聚合操作

2023-04-15 00:00:00 python 操作 聚合

MongoDB聚合操作:

MongoDB聚合操作是MongoDB中对文档进行分组、过滤、计算、排序等操作的一种方式。下面是一些常用的MongoDB聚合操作:

  1. 分组操作

MongoDB中的分组操作类似于SQL语句中的group by,可以将数据根据指定的字段进行分组。

例如,将集合中的数据按照name字段分组,统计各组的数量:

db.collection.aggregate([
{ $group: { _id: "$name", count: { $sum: 1 } } }
])

  1. 过滤操作

过滤操作可以在聚合操作中使用$match操作符指定条件进行筛选,类似于SQL语句中的where。

例如,将集合中name为“pidancode.com”的文档进行筛选,然后进行分组统计:

db.collection.aggregate([
{ $match: { name: "pidancode.com" } },
{ $group: { _id: "$score", count: { $sum: 1 } } }
])

  1. 计算操作

MongoDB中的计算操作可以使用一些聚合操作符来实现,如$sum、$avg、$min、$max等。

例如,将集合中的score字段求和:

db.collection.aggregate([
{ $group: { _id: null, totalScore: { $sum: "$score" } } }
])

  1. 排序操作

排序操作可以在聚合操作中使用$sort操作符指定排序方式。

例如,将集合中的score字段进行降序排列:

db.collection.aggregate([
{ $sort: { score: -1 } }
])

Elasticsearch聚合操作:

Elasticsearch聚合操作是Elasticsearch中对文档进行分组、过滤、计算、排序等操作的一种方式。下面是一些常用的Elasticsearch聚合操作:

  1. 分组操作

Elasticsearch中的分组操作类似于SQL语句中的group by,可以将数据根据指定的字段进行分组。

例如,将索引中的数据按照category字段分组,统计各组的数量:

{
"aggs": {
"group_by_category": {
"terms": {
"field": "category",
"size": 10
},
"aggs": {
"count": {
"value_count": {
"field": "category"
}
}
}
}
}
}

  1. 过滤操作

过滤操作可以在聚合操作中使用filter操作符指定条件进行筛选,类似于SQL语句中的where。

例如,将索引中category为“皮蛋编程”的文档进行筛选,然后进行分组统计:

{
"aggs": {
"filtered_category": {
"filter": {
"term": {
"category": "皮蛋编程"
}
},
"aggs": {
"group_by_score": {
"terms": {
"field": "score",
"size": 10
},
"aggs": {
"count": {
"value_count": {
"field": "score"
}
}
}
}
}
}
}
}

  1. 计算操作

Elasticsearch中的计算操作可以使用一些聚合操作符来实现,如sum、avg、min、max等。例如,将索引中的score字段求和:

{
"aggs": {
"total_score": {
"sum": {
"field": "score"
}
}
}
}

  1. 排序操作

排序操作可以在聚合操作中使用order操作符指定排序方式。

例如,将索引中的score字段进行降序排列:

{
"aggs": {
"group_by_score": {
"terms": {
"field": "score",
"order": {
"_count": "desc"
}
},
"aggs": {
"count": {
"value_count": {
"field": "score"
}
}
}
}
}
}

相关文章