sql >> Database >  >> NoSQL >> MongoDB

MongoDB-aggregatie met som van arraywaarden

Om aan uw behoeften te voldoen met een aggregatieraamwerk, is de eerste pijplijnfase een $match bewerking op de betreffende passagier die overeenkomt met de documenten met de gebruiker in de passagiersreeks, gevolgd door de $unwind bewerking die de passagiersreeks deconstrueert uit de invoerdocumenten in de vorige bewerking om een ​​document voor elk element uit te voeren. Nog een $match Er volgt een bewerking op de gedeconstrueerde array die de vorige documentstroom verder filtert om alleen overeenkomende documenten ongewijzigd door te laten gaan naar de volgende pijplijnfase, die de vereiste velden projecteert met het $project exploitant. Dus in wezen uw aggregatiepijplijn voor user3 zal zijn als:

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

Resultaat :

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

UPDATE :

Voor het groeperen van duplicaten van stuurprogramma's met verschillende datums, zoals u zei, kunt u een $group doen operatie net voor het laatste $project pijplijnfase waarin u de totale passagierstijden berekent met behulp van de $sum operator:

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
        }
     }
])

Resultaat :

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



  1. Spring Data Redis Expire Key

  2. Mangoestschema:'uniek' wordt niet gerespecteerd

  3. Redis hash paginering

  4. Hoe zou Redis te weten komen of het gegevens in de cache of nieuwe gegevens uit DB moet retourneren?