猫鼬子查询

最高

我有一个如下集合:

[
    {
    "orderNum": "100",
    "createdTime": ISODate("2020-12-01T21:00:00.000Z"),
    "amount": 100
    },
    {
    "orderNum": "200",
    "createdTime": ISODate("2020-12-01T21:01:00.000Z"),
    "amount": 200
    },
    {
    "orderNum": "300",
    "createdTime": ISODate("2020-12-01T21:02:00.000Z"),
    "amount": 300
    },
    {
    "orderNum": "400",
    "createdTime": ISODate("2020-12-01T21:03:00.000Z"),
    "amount": 400
    },
]

并且我试图获取在订单号300之前创建的订单总数(因此,订单号100和#200,总金额为300)。

有谁知道如何通过猫鼬得到它?

温弗里德·唐姆谢特

您可以使用以下一种:

db.collection.aggregate([
   { $sort: { orderNum: 1 } }, // by default the order of documents in a collection is undetermined
   { $group: { _id: null, data: { $push: "$$ROOT" } } }, // put all documents into one document
   { $set: { data: { $slice: ["$data", { $indexOfArray: ["$data.orderNum", "300"] }] } } }, // cut desired elementes from array
   { $unwind: "$data" }, // transform back to documents
   { $replaceRoot: { newRoot: "$data" } },
   { $group: { _id: null, total_amount: { $sum: "$amount" } } } // make summary
])

实际上,并不需要$unwind$group,因此快捷方式是这样的:

db.collection.aggregate([
   { $sort: { orderNum: 1 } },
   { $group: { _id: null, data: { $push: "$$ROOT" } } },
   { $set: { data: { $slice: ["$data", { $indexOfArray: ["$data.orderNum", "300"] }] } } },
   { $project: { total_amount: { $sum: "$data.amount" } } }
])

但是@turivishal的答案甚至更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章