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

Jak agregovat známky všech předmětů v mongoDB

Můžete použít níže uvedenou agregaci:

db.col.aggregate([
    {
        $unwind: "$marks"
    },
    {
        $project: {
            _id: 1,
            name: 1,
            marks: {
                $objectToArray: "$marks"
            }
        }
    },
    {
        $project: {
            _id :1,
            name: 1,
            total_marks: {
                $reduce: {
                    input: "$marks",
                    initialValue: 0,
                    in: { $add : ["$$value", "$$this.v"] }
                }
            }
        }
    },
    {
        $group: {
            _id: "$_id",
            name: { $first: "$name" },
            total_marks: { $sum: "$total_marks" }
        }
    }
])

Protože jsou vaše značky uloženy jako objekt, měli byste použít $objectToArray získat řadu předmětů. Pak můžete použít $reduce sečíst všechny předměty na jednoho studenta.




  1. Lepší způsob, jak přesunout sbírku MongoDB do jiné sbírky

  2. 10 nejlepších hostingových platforem MongoDB

  3. Návrh schématu MongoDB:Vždy existuje schéma

  4. Jak mohu uložit denní dobu v MongoDB? Jako struna? Uveďte libovolný rok/měsíc/den?