sql >> Database teknologi >  >> NoSQL >> MongoDB

Flere gruppeoperationer ved hjælp af Mongo-aggregationsramme

Det er vigtigt at forstå, at operationerne i argumentet to aggregate() danner en pipeline . Dette betød, at input til ethvert element i pipelinen er strømmen af ​​dokumenter produceret af det forrige element i pipelinen.

I dit eksempel opretter din første forespørgsel en pipeline af dokumenter, der ser sådan ud:

{
    "_id" : 2,
    "avg_score" : 5.5
},
{
    "_id" : 1,
    "avg_score" : 4
}

Det betyder, at det andet element i piplinen er at se en række dokumenter, hvor de eneste nøgler er "_id" og "avg_score". Nøglerne "category_id" og "score" findes ikke længere i denne dokumentstrøm.

Hvis du vil aggregere yderligere på denne strøm, skal du aggregere ved hjælp af de nøgler, der ses på dette trin i pipelinen. Da du vil beregne gennemsnittet af gennemsnittet, skal du indsætte en enkelt konstant værdi for _id-feltet, så alle inputdokumenterne bliver grupperet i et enkelt resultat.

Følgende kode giver det korrekte resultat:

db.questions.aggregate(
    { $group : {
        _id : "$category_id",
        avg_score : { $avg : "$score" },
        }
    },
    { $group : {
        _id : "all",
        avg_score : { $avg : "$avg_score" },
        }
    }
);

Når den køres, producerer den følgende output:

 {
    "result" : [
        {
        "_id" : "all",
        "avg_score" : 4.75
        }
    ],
    "ok" : 1
 }



  1. Importer csv-data som array i mongodb ved hjælp af mongoimport

  2. Auto-genereret felt til MongoDB ved hjælp af Spring Boot

  3. Meteor returnerer ugyldig hexadecimal strengfejl ved at forsøge at oprette ObjectID?

  4. Hvordan bruger StackExchange.Redis flere endepunkter og forbindelser?