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

MongoDB Aggregation med summen af ​​matrixværdier

For at opnå dine behov med aggregeringsramme, vil det første pipelinetrin være en $match operation på den pågældende passager, der matcher dokumenterne med brugeren i passagerarrayet, efterfulgt af $unwind operation, som dekonstruerer passagerarrayet fra inputdokumenterne i den foregående operation for at udlæse et dokument for hvert element. Endnu en $match operation på det dekonstruerede array følger, som yderligere filtrerer den forrige dokumentstrøm for kun at tillade, at matchende dokumenter passerer uændret ind i det næste pipelinestadie, som projicerer de påkrævede felter med $project operatør. Så i det væsentlige din aggregeringspipeline for user3 vil være sådan:

db.collection.aggregate([
     {
        "$match": {
            "passengers.user": "user3"
        }
     },
     {
         "$unwind": "$passengers"
     },
     {
        "$match": {
            "passengers.user": "user3"
        }
     },
     {
         "$project": {
             "_id": 0,
            "driver": "$driver",
            "times": "$passengers.times"
        }
     }
])

Resultat :

/* 0 */
{
    "result" : [ 
        {
            "driver" : "user1",
            "times" : 3
        }, 
        {
            "driver" : "user2",
            "times" : 2
        }
    ],
    "ok" : 1
}

OPDATERING :

For at gruppere dubletter på drivere med forskellige datoer, som du nævnte, kan du lave en $group operation lige før det sidste $project pipeline-fase, hvor du beregner de samlede passagertider ved hjælp af $sum operatør:

db.collection.aggregate([
     {
        "$match": {
            "passengers.user": "user3"
        }
     },
     {
         "$unwind": "$passengers"
     },
     {
        "$match": {
            "passengers.user": "user3"
        }
     },
     {
         "$group": {
             "_id": "$driver", 
             "total": {
                 "$sum": "$passengers.times"
             }
         }
     },
     {
         "$project": {
            "_id": 0,
            "driver": "$_id",
            "total": 1
        }
     }
])

Resultat :

/* 0 */
{
    "result" : [ 
        {
            "total" : 2,
            "driver" : "user2"
        }, 
        {
            "total" : 3,
            "driver" : "user1"
        }
    ],
    "ok" : 1
}



  1. MongoDB:Er det muligt at lave en forespørgsel uden store og små bogstaver?

  2. Hvordan opretter man sin egen database i Redis?

  3. Redis - Brug af CONFIG SET på farten i et master-slave-forhold

  4. Mongodb vil ikke starte