当前位置:网站首页>Mongodb aggregation operation summary

Mongodb aggregation operation summary

2022-07-04 22:37:00 cui_ yonghua

1. Role of aggregation operation

MongoDB Middle polymerization (aggregate) It's mainly used to process data ( Such as the statistical average , Make a peace, etc ), And return the calculated data result .

It's kind of similar SQL Statement count(*), sum(), avg().

2. aggregate() Method

MongoDB The method of aggregation used in aggregate().

Grammar format :db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

Case study : Count the number of articles written by each author , Use aggregate() The calculation results are as follows

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", num_tutorial : {
    $sum : 1}}}])

#  similar SQL sentence 
select by_user, count(*) from mycol group by by_user;

In the example above , Through fields by_user Fields group data , And calculate by_user The sum of the same values of the fields .

3. Common aggregate expressions

1、$sum Calculate the sum .

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", num_tutorial : {
    $sum : "$likes"}}}])

1、$avg Calculate average

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", num_tutorial : {
    $avg : "$likes"}}}])

1、$min Get the minimum value of all documents in the collection .

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", num_tutorial : {
    $min : "$likes"}}}])

1、$max Get the maximum value of all documents in the collection .

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", num_tutorial : {
    $max : "$likes"}}}])

1、$push Add values to an array , Does not determine whether there are duplicate values .

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", url : {
    $push: "$url"}}}])

1、$addToSet Add values to an array , Will determine whether there are duplicate values , If same value already exists in array , Do not join .

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", url : {
    $addToSet : "$url"}}}])

1、$first Get the first document data according to the sorting of resource documents .

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", first_url : {
    $first : "$url"}}}])

1、$last Get the last document data according to the sorting of resource documents

db.mycol.aggregate([{
    $group : {
    _id : "$by_user", last_url : {
    $last : "$url"}}}])

4. The concept of pipes

Pipes in Unix and Linux It is generally used to take the output of the current command as the parameter of the next command .

MongoDB The polymerization pipeline of will MongoDB The document passes the result to the next pipeline after processing one pipeline . Pipeline operation can be repeated .

expression : Process input documents and output . Expressions are stateless , Only documents that can be used to calculate the current aggregate pipeline , Can't process other documents .

Schematic diagram of polymerization pipeline
 Please add a picture description
amount to Sql sentence : Select cust_id,sum(amount)as total from orders where status= "A"

Several operations commonly used in aggregation framework

  1. $project: Modify the structure of the input document . Can be used to rename 、 Add or remove fields , It can also be used to create calculation results and nested documents .
  2. $match: For filtering data , Output only documents that meet the criteria .$match Use MongoDB Standard query operation .
  3. $limit: Used to restrict MongoDB The number of documents returned by the aggregation pipeline .
  4. $skip: Skip the specified number of documents in the aggregation pipeline , And return the remaining documents .
  5. $unwind: Split an array type field in the document into multiple fields , Each contains a value in the array .
  6. $group: Group documents in a collection , Can be used for statistical results .
  7. $sort: Sort the input documents and output .
  8. $geoNear: Output ordered documents close to a geographic location .

Case study 1:$project

db.article.aggregate({
    $project: {
    title: 1, author: 1,}});

#  By default _id Fields are included , If you want to exclude _id That's how it works 
db.article.aggregate({
    $project: {
    _id : 0 ,title: 1 ,author: 1}});

Case study 2:$match Case study , Get score greater than 70 Less than or equal to 90 Record , Then send the eligible records to the next stage $group The pipeline operator handles .

db.articles.aggregate([{
     $match : {
     score : {
     $gt : 70, $lte : 90 } } },{
     $group: {
     _id: null, count: {
     $sum: 1 } } }]);

Case study 3: after $skip After the pipeline operator is processed , The first five documents are " Filter " fall .

db.article.aggregate({
    $skip : 5 });

5. SQL Corresponding to aggregation

SQL The term 、 function 、 Concept MongoDB Aggregation operation
WHERE$match
GROUP BY$group
HAVING$match
SELECT$project
ORDER BY$sort
LIMIT$limit
SUM()$sum
COUNT()$sum
join$lookup (3.2 Version added )
原网站

版权声明
本文为[cui_ yonghua]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/185/202207042057004977.html