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

È necessario sommare dal valore dell'oggetto array in mongodb

Non funziona correttamente perché sta aggregando tutti i documenti della collezione; stai raggruppando su una costante "_id": "tempId" , devi solo fare riferimento alla chiave corretta aggiungendo il $ come:

db.getCollection('myCollection').aggregate([
    { "$group": {
        "_id": "$tempId",
        "totalValue": { 
            "$sum": { "$sum": "$messages.data.value" } 
        }
    } }
])

che in sostanza è una versione della pipeline a stadio singolo di un'operazione aggregata con un campo aggiuntivo che contiene l'espressione sum prima della pipeline di gruppo, quindi chiamando quel campo come $sum operatore nel gruppo.

Quanto sopra funziona poiché $sum da MongoDB 3.2+ è disponibile sia in $project e $group fasi e quando utilizzato nel $project stage, $sum restituisce la somma dell'elenco delle espressioni. L'espressione "$messages.data.value" restituisce un elenco di numeri [120, 1200] che vengono quindi utilizzati come $sum espressione:

db.getCollection('myCollection').aggregate([
    { "$project": {
        "values": { "$sum": "$messages.data.value" },
        "tempId": 1,
    } },
    { "$group": {
        "_id": "$tempId",
        "totalValue": { "$sum": "$values" }
    } }
])