sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB Aggregation med summan av matrisvärden

För att uppnå dina behov med aggregeringsramverk kommer det första pipelinesteget att vara en $match operation på passageraren i fråga som matchar dokumenten med användaren i passageraruppsättningen, följt av $unwind operation som dekonstruerar passageraruppsättningen från inmatningsdokumenten i föregående operation för att mata ut ett dokument för varje element. Ännu en $match operation på den dekonstruerade arrayen följer som ytterligare filtrerar den föregående dokumentströmmen för att endast tillåta matchande dokument att passera oförändrade till nästa pipelinesteg, som projicerar de obligatoriska fälten med $project operatör. Så i huvudsak din aggregeringspipeline för user3 kommer att vara som:

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
}

UPPDATERA :

För att gruppera dubbletter på drivrutiner med olika datum, som du nämnde kan du göra en $group operation strax före det sista $project pipeline-steg där du beräknar de totala passagerartiderna med $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:misslyckades med att ansluta till servern vid första anslutningen

  2. mongodb/mongoose findMany - hitta alla dokument med ID:n listade i array

  3. Logga MongoDB-frågor med Spring Boot

  4. Redis - Utgångna index tas inte bort