MongoDB的。处理数组和计算

时间:2019-03-20 20:09:58

标签: mongodb aggregation-framework

我正努力寻找一种方法来获取特定时期内产品订单的数量。我想特别地获取两天前以来的产品订单总和(我想要3月21日至3月19日之间的订单总和) 因此,我们不会将3月17日的订单添加到结果中。

这是示例记录

{
"productId": "32947681206",
"category": "Furniture",
"orders": [{
        "date": ISODate("2019-03-17T00:00:00.000+0000"),
        "orders": NumberInt(3)
    },
    {
        "date": ISODate("2019-03-19T00:00:00.000+0000"),
        "orders": NumberInt(3)
    },
    {
        "date": ISODate("2019-03-20T00:00:00.000+0000"),
        "orders": NumberInt(2)
    }
]

}

1 个答案:

答案 0 :(得分:2)

您可以使用$reduce有条件($cond)求和数组元素:

db.col.aggregate([
    {
        $project: {
            sum: {
                $reduce: {
                    input: "$orders",
                    initialValue: 0,
                    in: {
                        $add: [
                            "$$value",
                            {
                                $cond: [
                                    { $gte: [ "$$this.date", ISODate("2019-03-19T00:00:00.000+0000") ] },
                                    "$$this.orders",
                                    0
                                ]
                            }
                        ]
                    }
                }
            }
        }
    }
])