Node.js + Mongoose.js Как получить сумму заказов, размещенных за месяц или неделю?
Я выясняю общую структуру, но как получить документы за месяц или неделю? Я пытаюсь подсчитать, сколько заказов размещено за неделю или за месяц. Документы такие:
{
"_id" : ObjectId("53834167b54a3b22f0079e2c"),
"createdDate" : ISODate("2014-05-26T13:28:07.942Z"),
"__v" : 0
},
{
"_id" : ObjectId("53834167b54a3b22f0079e2c"),
"createdDate" : ISODate("2014-05-28T09:28:07.942Z"),
"__v" : 0
}
Все, что я хочу, - это сколько заказов размещается в месяц в соответствии с созданной датой.
Текущий код, который я использую:
Order.aggregate([
{ "$match": {
'createdDate': {
"$gte": new Date("2014-05-25"), "$lte": new Date("2014-05-27")
}
}},
{ "$group": {
"_id": { "$dayOfYear": "$createdDate" },
"totalCost": { "$sum": "$totalCost" },
"sum": {"$sum": 1}
}}
],
function(err, result) {
console.log(result);
if (err) {
res.send(400, err);
} else {
res.send(200, result);
}
});
1 ответ
Если вы просто хотите получить общее количество заказов за определенный период времени, вы можете просто использовать диапазонный запрос для вашей даты, используя $gte
а также $lt
операторы стиля:
var query = Model.find({
"createdDate": {
"$gte": new Date("2014-05-21"), "$lte": new Date("2014-05-29")
}
}).count()
query.exec(function(err, count) {
И это просто вернет счет, если документы найдены в этом диапазоне.
Если вы хотите суммировать значение из своего документа или даже получить что-то вроде "ежедневных итогов" из этого диапазона дат, то вы можете использовать структуру агрегации, чтобы сделать это:
Model.aggregate([
{ "$match": {
"$gte": new Date("2014-05-21"), "$lte": new Date("2014-05-29")
}},
{ "$group": {
"_id": { "$dayOfYear": "$createdDate" }
"totalValue": { "$sum": "$orderTotal" }
}}
],
function(err, result) {
Это не только использует $sum
оператор, чтобы сложить значения для нашего поля "orderTotal", но также использует оператор агрегации дат для группировки по всем значениям как каждый день в пределах данного диапазона.
Если вам нужен последний случай, вы можете использовать различные операторы там, чтобы разбить различные периоды дат, которые вы хотите включить в свои результаты.