sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kan jag beräkna totalt positivt, totalt negativt pris och summa med Node.js och Mongoose

Med tanke på att förväntade resultat är siffror och värdena från summary samling är siffror (annars måste du göra dem till siffror) här är en aggregering som beräknar resultatet:

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()

Resultat:

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
}

Senare måste du konvertera dem till strängar om du behöver.

Obs! Resultatet åsidosätter sammanfattningssamlingen med nya beräknade (och uppdaterade) värden. Bättre testa dina resultat först.



  1. Hur man fortsätter infogningen efter dubblettnyckelfel med PyMongo

  2. Node.js och MongoDB tidszonsproblem UTC konverteras inte korrekt av drivrutinen?

  3. Mongoose lägger till flera objekt till databasen

  4. Få den senaste skivan från mongodb collection