Как отобразить коллекцию с изменяющимся интервалом, чтобы поддерживать среднюю и трендовую панель? - PullRequest
1 голос
/ 24 октября 2019

Рассмотрим следующие данные о продажах из коллекции продаж mongoDb (product_id указывает на полный документ продукта):

{ "_id" : ObjectId("5cb4be63122ffe0284ef7041"), "product_id" : ObjectId("5b68bcc8a4e46302c325e03e"), "dateTime" : 1555349091321, "quantity" : 100 }
{ "_id" : ObjectId("5cb4be89122ffe0284ef7045"), "product_id" : ObjectId("5c374b7c183973020f6f164d"), "dateTime" : 1555349129818, "quantity" : 100 }
{ "_id" : ObjectId("5cb4beb7122ffe0284ef7049"), "product_id" : ObjectId("5b68bce4a4e46302c325e040"), "dateTime" : 1555349175057, "quantity" : 100 }
{ "_id" : ObjectId("5cb4d212122ffe0284ef7096"), "product_id" : ObjectId("5b68b9b2a4e46302c325e01c"), "dateTime" : 1555354130281, "quantity" : 1 }
{ "_id" : ObjectId("5cb608501bd531027c98a66b"), "product_id" : ObjectId("5b68bce4a4e46302c325e040"), "dateTime" : 1555433552312, "quantity" : 1500 }
{ "_id" : ObjectId("5cb608d91bd531027c98a66f"), "product_id" : ObjectId("5b68bce4a4e46302c325e040"), "dateTime" : 1555433689700, "quantity" : 1500 }
{ "_id" : ObjectId("5cb6095a1bd531027c98a671"), "product_id" : ObjectId("5b68bcc8a4e46302c325e03e"), "dateTime" : 1555433818444, "quantity" : 800 }
{ "_id" : ObjectId("5cb6099f1bd531027c98a673"), "product_id" : ObjectId("5c374b7c183973020f6f164d"), "dateTime" : 1555433887589, "quantity" : 1000 }
{ "_id" : ObjectId("5cb60a161bd531027c98a677"), "product_id" : ObjectId("5c374b7c183973020f6f164d"), "dateTime" : 1555434006640, "quantity" : 1000 }
{ "_id" : ObjectId("5cb60a331bd531027c98a67b"), "product_id" : ObjectId("5b68bcc8a4e46302c325e03e"), "dateTime" : 1555434035074, "quantity" : 800 }
{ "_id" : ObjectId("5cb60cbc1bd531027c98a67d"), "product_id" : ObjectId("5b68bcc8a4e46302c325e03e"), "dateTime" : 1555434684615, "quantity" : 200 }
{ "_id" : ObjectId("5cb60d311bd531027c98a67f"), "product_id" : ObjectId("5b68bcc8a4e46302c325e03e"), "dateTime" : 1555434801277, "quantity" : 200 }
{ "_id" : ObjectId("5cb6195e1bd531027c98a6ae"), "product_id" : ObjectId("5b68bce4a4e46302c325e040"), "dateTime" : 1555437918333, "quantity" : 5900 }
{ "_id" : ObjectId("5cb6199b1bd531027c98a6b0"), "product_id" : ObjectId("5b68bcc8a4e46302c325e03e"), "dateTime" : 1555437979763, "quantity" : 1900 }
{ "_id" : ObjectId("5cb619c01bd531027c98a6b2"), "product_id" : ObjectId("5c374b7c183973020f6f164d"), "dateTime" : 1555438016908, "quantity" : 900 }
{ "_id" : ObjectId("5cb61a0e1bd531027c98a6b6"), "product_id" : ObjectId("5b68bd59a4e46302c325e045"), "dateTime" : 1555438094303, "quantity" : 30 }
{ "_id" : ObjectId("5cb61a531bd531027c98a6ba"), "product_id" : ObjectId("5cb612911bd531027c98a681"), "dateTime" : 1555438163956, "quantity" : 1300 }
{ "_id" : ObjectId("5cb61abb1bd531027c98a6be"), "product_id" : ObjectId("5cb612911bd531027c98a681"), "dateTime" : 1555438267980, "quantity" : 1300 }
{ "_id" : ObjectId("5cb61e4d1bd531027c98a6d2"), "product_id" : ObjectId("5b68bcc8a4e46302c325e03e"), "dateTime" : 1555439181478, "quantity" : 350 }
{ "_id" : ObjectId("5cb6205a1bd531027c98a6e4"), "product_id" : ObjectId("5b68bcc8a4e46302c325e03e"), "dateTime" : 1555439706069, "quantity" : 350 }

dateTime - это дата транзакции с использованием функции Date.now() Javascript.

На стороне пользователя у меня есть панель инструментов продаж: enter image description here

Доступна информация о пользователе:

  1. Индикатор «среднее количество продаж»между определенным пользователем интервалом (этот месяц, сегодня, вчера, свободный интервал, ввод даты начала - даты окончания)
  2. Тренд того же индикатора «среднее количество продаж» из выбранного исторического интервала. Например, если пользователь выбирает «сегодня», тренд происходит ежедневно. Если пользователь выбирает «месяц», тренд имеет месяц и т. Д. Если пользователь выбирает пользовательский интервал, он работает в ближайшем интервале (час в течение того же дня, дни в течение недели или месяца, месяцы в течение года)

  3. Если пользователь щелкаетна индикаторе появляется сетка со всеми связанными записями, и пользователь может изменить количество товара (и это отразится на целых показателях)

У меня есть тысячи записей, и яЯ буду собирать функцию mapReduce для поддержки этой панели, где я хотел бы спросить:

a) Я не хочу запускать mapReduce каждый раз, когда пользователь меняет интервал, так как это займет много времени, но я могуне вижу, как я буду хранить различные комбинации интервалов в коллекции результатов. Итак, каков подход, если у пользователя есть бесплатная конфигурация начала и конца интервала, с которым будет работать mapReduce.

b) Точно так же, для каждого интервала у меня будет другой интервал данных для трендов,Как я могу сделать это в результате сбора результатов?

c) Что мне делать, если пользователь изменяет данные. Запустить новый mapReduce немедленно для всех не охваченных интервалов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...