MongoDB $ group + $ project + еженедельное среднее - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь получить среднее значение пунктуации для некоторых магазинов в Монго еженедельно, но это не работает. Не могли бы вы помочь мне?

db.collection.aggregate(
[
    {$match:{storeId:{$in:[
ObjectId("e069d1b76557685b9e235v"),ObjectId("e069d1b76557685b9t7j8n"),
ObjectId("e069d1b76557685b9e2fg6"),ObjectId("e069d1b76557685b9p56r2") 
]}}},
{$group:{_id:"$storeId", week: { date: new Date("$createdAt")  }, totalPoints: {$sum: "$points"}, averagePoints: {$avg: "$points"}} },
    {$sort: {totalPoints:-1}}
])

Это не работает. Но если я удалю часть недели, код сработает, но получится неправильное среднее

db.collection.aggregate(
[
    {$match:{storeId:{$in:[
ObjectId("e069d1b76557685b9e235v"),ObjectId("e069d1b76557685b9t7j8n"),
ObjectId("e069d1b76557685b9e2fg6"),ObjectId("e069d1b76557685b9p56r2") 
]}}},
{$group:{_id:"$storeId", totalPoints: {$sum: "$points"}, averagePoints: {$avg: "$points"}} },
    {$sort: {totalPoints:-1}}
])

1 Ответ

0 голосов
/ 01 ноября 2018

Для groupBy недели вы можете использовать функцию $week из Монго и добавить дату начала в операции $match.

db.collection.aggregate(
[
    {$match:{storeId:{$in:[
ObjectId("e069d1b76557685b9e235v"),ObjectId("e069d1b76557685b9t7j8n"),
ObjectId("e069d1b76557685b9e2fg6"),ObjectId("e069d1b76557685b9p56r2") 
]},
 timeStamp: {$gt: ISODate(createdAt)},
}},
{$group:{_id:"$storeId", week: { $week: '$timeStamp'}, totalPoints: {$sum: "$points"}, averagePoints: {$avg: "$points"}} },
    {$sort: {totalPoints:-1}}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...