devops
devops copied to clipboard
mongo有哪些聚合函数,分别是如何使用,列出具体案例
MongoDB的聚合操作是通过管道进行操作的,每个操作在管道中以一个文档的形式存在,文档中的操作是有顺序的,前一个文档的操作结果会作为后一个文档操作的输入。以下是一些常见的聚合操作:
- $match:过滤数据,只输出符合条件的文档。
db.orders.aggregate([
{ $match: { status: "A" } }
])
- $group:将集合中的文档分组,可用于计数或者累计求和。
db.orders.aggregate([
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])
- $sort:将输入文档排序后输出。
db.orders.aggregate([
{ $sort : { age : -1, posts: 1 } }
])
- $limit:限制聚合管道返回的文档数。
db.orders.aggregate([
{ $limit : 5 }
])
- $skip:跳过指定数量的文档,并返回余下的文档。
db.orders.aggregate([
{ $skip : 5 }
])
- $project:改变输入文档的结构。可以用来重命名、增加或删除字段,也可以用于创建计算结果以及嵌套文档。
db.orders.aggregate([
{ $project : { item : 1, total : { $multiply: [ "$price", "$quantity" ] } } }
])
- $unwind:将数组类型字段拆分成多个输出文档。
db.orders.aggregate([
{ $unwind : "$sizes" }
])
以上是MongoDB中常用的一些聚合操作,具体使用时需要根据需求来选择合适的聚合操作。
$match操作符可以使用MongoDB的所有查询操作符。以下是一些复杂条件的使用案例:
- 比较大小:你可以使用操作符如$gt(大于),$gte(大于等于),$lt(小于),$lte(小于等于),$ne(不等于)进行比较操作。
db.orders.aggregate([
{ $match: { price: { $gt: 50 } } }
])
这个案例会匹配所有价格大于50的订单。
- 数组匹配:如果你需要匹配数组中的元素,你可以直接通过元素进行匹配,也可以使用$all、$size、$elemMatch等操作符。
db.orders.aggregate([
{ $match: { "items.color": "blue" } }
])
这个案例会匹配所有items数组中包含有颜色为blue的元素的文档。
db.orders.aggregate([
{ $match: { items: { $elemMatch: { color: "blue", size: "M" } } } }
])
这个案例会匹配所有items数组中有元素同时颜色为blue并且尺寸为M的文档。
- 组合条件:你可以使用$or、$and、$not、$nor进行条件的组合。
db.orders.aggregate([
{ $match: { $or: [ { price: { $gt: 50 } }, { "items.color": "blue" } ] } }
])
这个案例会匹配所有价格大于50或者items数组中包含有颜色为blue的元素的文档。