sql >> Databáze >  >> NoSQL >> MongoDB

Je třeba sečíst z hodnoty objektu pole v mongodb

Nepracuje správně, protože shromažďuje všechny dokumenty v kolekci; seskupujete podle konstanty "_id":"tempId" , stačí uvést správný klíč přidáním $ jako:

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

což je v podstatě jednostupňová kanálová verze agregované operace se zvláštním polem, které obsahuje výraz součtu před skupinovým kanálem, poté volá toto pole jako $sum operátor ve skupině.

Výše uvedené funguje od $sum z MongoDB 3.2+ je k dispozici jak v $project a $group etapách a při použití v $projekt fáze, $sum vrátí součet seznamu výrazů. Výraz "$messages.data.value" vrátí seznam čísel [120, 1200] které se pak použijí jako $sum výraz:

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


  1. Příkaz opravy MongoDB se nezdařil

  2. Existuje způsob, jak automaticky objevit novou IP uzlu clusteru v Redis Cluster s Lettuce

  3. Jak spouštět více aplikací s jedním mongodb pomocí dockeru

  4. Integrace a služby dostupné z MongoDB pro cloud