2017-05-21 2 views
0
Inventors 
    .aggregate([{ 
      $match: filter 
     }, 
     { 
      $group: { 
       "_id": { 
        "store_id": "$store_id" 
       }, 
       stockAmount: { 
        $sum: { 
         $multiply: ["$intProductQty", "$dblMRP"] 
        } 
       }, 
       storeValue: { 
        $sum: "$intProductQty" 
       }, 
      } 
     }, 
    ]) 
    .exec(function(err, stock) { 
     return res.send(stock); 
    }); 

SchemaAggregat Betrieb kommen als null in mongodb

{ 
     "store_id" : "BST000433", 
     "strProductCode" : "9000000064775", 
     "dblMRP" : 25, 
     "intProductQty" : 1, 
} 

I diese Felder initailized (intProductQty, dblMRP, strPurchasePrice) als ganze Zahl ist. Aber wenn ich obigen Befehl ausführe, bekomme ich diese drei Werte (stockAmount, purchaseAmount, storeValue) als null.

+0

können Sie aktualisieren Ihren Beitrag enthalten Ihr Schema und ein Beispieldokument? – JohnnyHK

Antwort

1

Wenn es noch möglich ist, dass einige dieser Werte nicht, können Sie überprüfen, ob sie mit $ifNull null sind und setzen Sie sie auf 0 für die Berechnungen in einem $project Schritt nach dem $match:

$project: { 
    intProductQty: { $ifNull: [ "$intProductQty", 0 ] }, 
    dblMRP: { $ifNull: [ "$dblMRP", 0 ] }, 
    strPurchasePrice: { $ifNull: [ "$strPurchasePrice", 0 ] } 
}, 

auch ich denke, es ist nicht dein Fall, aber Sie könnten diejenigen, die nicht numerisch sind mit $type herauszufiltern:

$match: { 
    intProductQty: { $type: "number" }, 
    dblMRP: { $type: "number" }, 
    strPurchasePrice: { $type: "number" } 
},