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

Jak sečíst všechna pole v dílčím dokumentu MongoDB?

Udělali jste klasickou chybu, když jste měli libovolné názvy polí. MongoDB je „bez schématu“, ale to neznamená, že o svém schématu nemusíte přemýšlet. Názvy klíčů by měly být popisné a ve vašem případě např. "S2" ve skutečnosti nic neznamená. Abyste mohli provádět většinu druhů dotazů a operací, budete muset přepracovat své schéma tak, aby ukládalo vaše data takto:

_id:...
Segment:[
    { field: "S1", value: 1 },
    { field: "S2", value: 5 },
    { field: "Sn", value: 10 },
]

Poté můžete spustit dotaz takto:

db.collection.aggregate( [
    { $unwind: "$Segment" },
    { $group: {
        _id: '$_id', 
        sum: { $sum: '$Segment.value' } 
    } } 
] );

Což pak vede k něčemu takovému (s jediným dokumentem z vaší otázky):

{
    "result" : [
        {
            "_id" : ObjectId("51e4772e13573be11ac2ca6f"),
            "sum" : 16
        }
    ],
    "ok" : 1
}


  1. RedisClient LUA API

  2. pomocí mapy do mezipaměti pro přibližně 5000 záznamů v aplikaci Javascript VS Redis

  3. Redis Pub/Sub se spolehlivostí

  4. PostgreSQL vs. MongoDB