sql >> Base de Datos >  >> NoSQL >> MongoDB

Necesita sumar del valor del objeto de matriz en mongodb

No funciona correctamente porque agrega todos los documentos de la colección; está agrupando en una constante "_id": "tempId" , solo necesita hacer referencia a la clave correcta agregando $ como:

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

que, en esencia, es una versión de canalización de una sola etapa de una operación agregada con un campo adicional que contiene la expresión de suma antes de la canalización de grupo y luego llama a ese campo como $sum operador en el grupo.

Lo anterior funciona desde $sum de MongoDB 3.2+ está disponible tanto en $project y $group etapas y cuando se usa en el $project etapa, $sum devuelve la suma de la lista de expresiones. La expresión "$messages.data.value" devuelve una lista de números [120, 1200] que luego se utilizan como $sum expresión:

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