복붙노트

[MONGODB] 중첩 된 문서 MongoDB의에서 합계

MONGODB

중첩 된 문서 MongoDB의에서 합계

나는 운없이, 문서의 배열의 일부 값 합계를 시도하고있다.

이 문서입니다

db.Cuentas.find (). 꽤 ()

{
    "Agno": "2013",
    "Egresos": [
        {
            "Fecha": "28-01-2013",
            "Monto": 150000,
            "Detalle": "Pago Nokia Lumia a @josellop"
        },
        {
            "Fecha": "29-01-2013",
            "Monto": 4000,
            "Detalle": "Cine, Pelicula fome"
        }
    ],
    "Ingresos": [],
    "Mes": "Enero",
    "Monto": 450000,
    "Usuario": "MarioCares"
    "_id": ObjectId(....)
}

"MarioCares"그래서, 나는 "사용자 선호도"에 대한 "Egresos"의 "몬토"모든의 합이 필요합니다. 이 예 154000에서

내가 이것을 사용 집계 사용 :

db.Cuentas.aggregate(
    [
        { $match: {"Usuario": "MarioCares"} },
        { $group: 
            {
                _id: null,
                "suma": { $sum: "$Egresos.Monto" }
            }
        }
    ]
)

하지만 난 항상 얻을

{ "result" : [{ "_id" : null, "suma" : 0 }], "ok" : 1 }

내가 무엇을 잘못하고 있지 ?

경찰입니다 이미이 참조

해결법

  1. ==============================

    1.Sammaye는 바와 같이, 당신은 당신이 각 요소에 걸쳐 합계를 $ 할 수 있도록 배열 요소마다 일치하는 문서를 복제 할 Egresos 배열을 언 와인드 $해야합니다

    Sammaye는 바와 같이, 당신은 당신이 각 요소에 걸쳐 합계를 $ 할 수 있도록 배열 요소마다 일치하는 문서를 복제 할 Egresos 배열을 언 와인드 $해야합니다

    db.Cuentas.aggregate([
        {$match: {"Usuario": "MarioCares"} }, 
        {$unwind: '$Egresos'}, 
        {$group: {
            _id: null, 
            "suma": {$sum: "$Egresos.Monto" }
        }}
    ])
    
  2. ==============================

    2.이 방법으로도 할 수 있습니다. 다만 당신의 필드를 프로젝트 그룹에 필요가 없습니다.

    이 방법으로도 할 수 있습니다. 다만 당신의 필드를 프로젝트 그룹에 필요가 없습니다.

    db.Cuentas.aggregate([
        { $match: { "Usuario": "MarioCares" } },
        {
            $project: {
                'MontoSum': { $sum: "$Egresos.Monto" }
            }
        }
    ])
    
  3. from https://stackoverflow.com/questions/14570577/sum-in-nested-document-mongodb by cc-by-sa and MIT license