sql >> Database >  >> NoSQL >> MongoDB

Mongodb-aggregatieraamwerk | Groeperen over meerdere waarden?

OK, dus de oplossing is om een ​​geaggregeerde sleutel op te geven voor de _id-waarde. Dit wordt hier gedocumenteerd als:

U kunt een enkel veld opgeven uit de documenten in de pijplijn, een eerder berekende waarde of een aggregatiesleutel die is samengesteld uit verschillende binnenkomende velden.

Maar het definieert niet echt het formaat voor een geaggregeerde sleutel. Toen ik de eerdere documentatie hier las, zag ik dat de vorige collection.group-methode meerdere velden kon bevatten en dat dezelfde structuur wordt gebruikt in het nieuwe raamwerk.

Dus om over meerdere velden te groeperen kunt u _id : { success:'$success', responseCode:'$responseCode', label:'$label'} gebruiken

Zoals in:

resultsCollection.aggregate(
{ $match : { testid : testid} },
{ $skip : alreadyRead },
{ $project : {
        timeStamp : 1 ,
        label : 1,
        responseCode : 1 ,
        value : 1,
        success : 1
    }},
{ $group : {
        _id :  { success:'$success', responseCode:'$responseCode', label:'$label'},
        max_timeStamp : { $timeStamp : 1 },
        count_responseCode : { $sum : 1 },
        avg_value : { $sum : "$value" },
        count_success : { $sum : 1 }
    }}
);



  1. Botsingskans van ObjectId versus UUID in een groot gedistribueerd systeem

  2. Dwingt het toepassen van een 2dsphere-index op een mangoestschema dat het locatieveld verplicht is?

  3. Is er een manier om twee collecties in MongoDB atomair bij te werken?

  4. Sorteer geneste reeks objecten