devops icon indicating copy to clipboard operation
devops copied to clipboard

mongo有哪些聚合函数,分别是如何使用,列出具体案例

Open heidsoft opened this issue 2 years ago • 0 comments

MongoDB的聚合操作是通过管道进行操作的,每个操作在管道中以一个文档的形式存在,文档中的操作是有顺序的,前一个文档的操作结果会作为后一个文档操作的输入。以下是一些常见的聚合操作:

  1. $match:过滤数据,只输出符合条件的文档。
db.orders.aggregate([
   { $match: { status: "A" } }
])
  1. $group:将集合中的文档分组,可用于计数或者累计求和。
db.orders.aggregate([
   { $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])
  1. $sort:将输入文档排序后输出。
db.orders.aggregate([
   { $sort : { age : -1, posts: 1 } }
])
  1. $limit:限制聚合管道返回的文档数。
db.orders.aggregate([
   { $limit : 5 }
])
  1. $skip:跳过指定数量的文档,并返回余下的文档。
db.orders.aggregate([
   { $skip : 5 }
])
  1. $project:改变输入文档的结构。可以用来重命名、增加或删除字段,也可以用于创建计算结果以及嵌套文档。
db.orders.aggregate([
   { $project : { item : 1, total : { $multiply: [ "$price", "$quantity" ] } } }
])
  1. $unwind:将数组类型字段拆分成多个输出文档。
db.orders.aggregate([
   { $unwind : "$sizes" }
])

以上是MongoDB中常用的一些聚合操作,具体使用时需要根据需求来选择合适的聚合操作。

$match操作符可以使用MongoDB的所有查询操作符。以下是一些复杂条件的使用案例:

  1. 比较大小:你可以使用操作符如$gt(大于),$gte(大于等于),$lt(小于),$lte(小于等于),$ne(不等于)进行比较操作。
db.orders.aggregate([
   { $match: { price: { $gt: 50 } } }
])

这个案例会匹配所有价格大于50的订单。

  1. 数组匹配:如果你需要匹配数组中的元素,你可以直接通过元素进行匹配,也可以使用$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的文档。

  1. 组合条件:你可以使用$or、$and、$not、$nor进行条件的组合。
db.orders.aggregate([
   { $match: { $or: [ { price: { $gt: 50 } }, { "items.color": "blue" } ] } }
])

这个案例会匹配所有价格大于50或者items数组中包含有颜色为blue的元素的文档。

heidsoft avatar Oct 13 '23 10:10 heidsoft