MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak zsumować wszystkie pola w poddokumencie MongoDB?

Popełniłeś klasyczny błąd polegający na posiadaniu dowolnych nazw pól. MongoDB jest „wolny od schematów”, ale nie oznacza to, że nie musisz myśleć o swoim schemacie. Nazwy kluczy powinny być opisowe, a w Twoim przypadku np. „S2” tak naprawdę nic nie znaczy. Aby wykonywać większość zapytań i operacji, musisz przeprojektować schemat, aby przechowywać dane w następujący sposób:

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

Następnie możesz uruchomić zapytanie, takie jak:

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

Co z kolei prowadzi do czegoś takiego (z jedynym dokumentem z twojego pytania):

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Utwórz kolekcję w MongoDB

  2. Wyszukiwanie zagnieżdżone MongoDB z 3 poziomami

  3. Jak zaktualizować pola dokumentów MongoDB tylko wtedy, gdy nie istnieją?

  4. findOne poddokument w języku Mongoose

  5. mongodb nie mógł połączyć się z serwerem