mongodb

时间:2017-05-21 13:34:38

标签: mongodb mongoose mongodb-query aggregation-framework

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);
    });

模式

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

我将这些字段(intProductQty,dblMRP,strPurchasePrice)作为整数进行了初始化。但是当我执行上面的命令时,我得到三个值(stockAmount,purchaseAmount,storeValue)为null。

1 个答案:

答案 0 :(得分:1)

如果仍然可能没有设置其中某些值,您可以检查它们是否为$ifNull为空,并在$project步骤后$match步中将这些值设置为0 1}}:

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

此外,我想这不是你的情况,但你可以用$type过滤掉非数字的那些:

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