sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik de totale positieve, totale negatieve prijs en som berekenen met Node.js en Mongoose?

Aangezien de verwachte resultaten getallen zijn en de waarden uit summary verzameling zijn getallen (anders moet je er getallen van maken) hier is een aggregatie die het resultaat berekent:

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

Resultaat:

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
}

Later moet je ze desgewenst naar string converteren.

Opmerking: Het resultaat overschrijft de samenvattingsverzameling met nieuwe berekende (en bijgewerkte) waarden. Test eerst uw resultaten.



  1. Mongodb-atlas + node.js werken lokaal, maar stoppen wanneer ze naar Heroku . worden gepusht

  2. Werkt meteor automatisch de Mongodb-versie bij?

  3. Bitwise enum (vlaggen) query met MongoDB's officiële C#-stuurprogramma

  4. Waarom werkt findRandom() mongoose voor de node.js-methode niet?