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

Jak mogę obliczyć całkowitą dodatnią, całkowitą ujemną cenę i sumę za pomocą Node.js i Mongoose?

Biorąc pod uwagę, że oczekiwane wyniki to liczby i wartości z summary kolekcja to liczby (w przeciwnym razie musisz zrobić z nich liczby) tutaj jest agregacja, która oblicza wynik:

db.getCollection('userpricing').aggregate([
    {$group: {
        _id:"$user_id", 
        user_id: {$first: "$user_id"}, 
        Totalpositiveprice:{$sum:{$cond:[{ '$gt': ['$price', 0]}, "$price", 0]}}, 
        Totalnegativeprice:{$sum:{$cond:[{ '$lt': ['$price', 0]}, "$price", 0]}},
        Balanceprice:{"$sum":"$price"}}
     },
    {
      $lookup:
        {
          from: "summary",
          localField: "user_id",
          foreignField: "user_id",
          as: "user_id2"
        }
   },
   {$project: {
    _id:0, 
    user_id:1, 
    Totalpositiveprice: {$sum: ["$Totalpositiveprice", {$sum: "$user_id2.Totalpositiveprice"}] },
    Totalnegativeprice: {$sum: ["$Totalnegativeprice", {$sum: "$user_id2.Totalnegativeprice"}] },
    Balanceprice: {$sum: ["$Balanceprice", {$sum: "$user_id2.Balanceprice"}] },
}},

     {$out: "summary"}
]).pretty()

Wynik:

db.summary.find().pretty()

{
    "_id" : ObjectId("584fde2906c7385883be0d15"),
    "user_id" : 2,
    "Totalpositiveprice" : 10000,
    "Totalnegativeprice" : 0,
    "Balanceprice" : 10000
}
{
    "_id" : ObjectId("584fde2906c7385883be0d16"),
    "user_id" : 1,
    "Totalpositiveprice" : 23000,
    "Totalnegativeprice" : -10000,
    "Balanceprice" : 13000
}

Później musisz przekonwertować je na ciąg, jeśli zajdzie taka potrzeba.

Uwaga: Wynik zastępuje zbiór podsumowań nowymi obliczonymi (i zaktualizowanymi) wartościami. Lepiej najpierw przetestuj swoje wyniki.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Katalog główny Mongodb monogorestore musi być zrzutem pojedynczej bazy danych

  2. Dlaczego sterownik węzła mongoDB tworzy niechciane połączenia?

  3. Przeformatuj kolekcję za pomocą potoku agregacji w Mongodb

  4. Wprowadzenie do Morphii – Java ODM dla MongoDB

  5. MongoDB:Jaki jest sens używania MapReduce bez równoległości?