MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да сумирате всички полета в поддокумент на MongoDB?

Направили сте класическата грешка да имате произволни имена на полета. MongoDB е "без схема", но това не означава, че не е нужно да мислите за вашата схема. Ключовите имена трябва да са описателни, а във вашия случай, напр. "S2" всъщност не означава нищо. За да извършвате повечето видове заявки и операции, ще трябва да преработите схемата си, за да съхранявате данните си по следния начин:

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

След това можете да изпълните заявката си като:

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

Което след това води до нещо подобно (с единствения документ от вашия въпрос):

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да наблюдавате вашите сървъри за бази данни с помощта на ClusterControl CLI

  2. Стратегии за публикуване/абониране на Meteor за уникални колекции от страна на клиента

  3. mongoDB:$dateToString формат за показване на времето с интервал от 15 минути

  4. Импортирайте повече от 1 json файл с помощта на mongoimport

  5. Мониторинг на Percona сървър за MongoDB – ключови показатели