Всем привет. в монге относительно новичок, посему такой вопрос: как

можно аггрегировать данные по определенным временным интервалам, к-ые начинаются с сего дня ?

условно, есть 4 вида группировки
- неделя
- месяц
- год
- все время

везде группировка не по календарному дню / месяцу / году, а начиная с текущего дня (включительно). и вот стоит задача разбить данные в каждом типе группировки на равные интервалы

для недели — по дню (7 дней от текущего)
для месяца — по неделе (4 недели с текущего дня)
для года — по месяцу (12 месяцев с текущего дня)
для N лет — по году с текущего дня

данные вида
{id, date, ...otherFields}

вопрос заключается в том, как в aggregation пайплайне нарезать данные на такие вот кастомные слайсы, саму агрегацию я как-нить сам докручу. спасибо всем, кто откликнется )

19 ответов

34 просмотра

используйте сорт по дате

Arthur Irgashev
зачем ?

либо 2 вариант обычный find с $gte

Arthur-Irgashev Автор вопроса
Vladyslav Hrehul
либо 2 вариант обычный find с $gte

вопрос не в поиске данных в диапазоне, а группировке данных внутри диапазона по неделе / месяцу / году-ам от текущей даты юзера. кажется, вариант с оффсетом должен помочь, попробую проверить, как дойду до компа

Есть операторы, $lt,$lte,$gt,$gte. Используй их для поиска промежтоков между датами

Arthur Irgashev
вопрос не в поиске данных в диапазоне, а группиров...

вот как раз ваши "для .." и делаются обычным find + gte, lte

Arthur-Irgashev Автор вопроса
Vladyslav Hrehul
вот как раз ваши "для .." и делаются обычным find ...

кажется, я плохо сформулировал задачу ) есть сиквенс данных формата [{id, date, ...}, {id, date, ...}, {id, date, ...}] нужно 1) фильтрануть данные по нужному мне интервалу (это очевидно, как сделать, как раз через find + lte / gte) 2) по отфильтрованным данным сделать группировку и агрегацию по промежуткам. условно, groupBy isoWeek, но мне нужен не isoWeek / month/ etc, а текущая дата юзера. т.е. isoWeek нарежет мне данные за месяц на 4 недели календарные, с понедельника по воскресенье. мне же нужно нарезать с текущего дня + 7 дней назад. например, сегодня среда, значит мне нужно нарезать данные начиная со среды - 7 дней, потом среды - 14, среды - 21 и тд

Arthur Irgashev
кажется, я плохо сформулировал задачу ) есть сикв...

сложно понять ваше "групировка", мне кажется это не то, что имеется ввиду. группировка, это - показать сколько раз встерачется id и тд. Ваша ж формулировка - чисто "разбитие" по рейнджу дат - не вижу самой группировки - по чем она должна быть или вам она вовсе и ненужна?

Arthur-Irgashev Автор вопроса
Vladyslav Hrehul
сложно понять ваше "групировка", мне кажется это н...

мне дальше нужно будет агрегировать вот эти нарезанные слайсы и показывать сумму / avg значений из этого слайса т.е. если я выбираю - недельный слайс, то нужно показать агрегацию значений за 7 дней начиная с текущего (на графике должно быть 7 баров) - месячный слайс, то нужно показывать агрегацию значений за неделю, начиная с текущего дня (на графике должно быть 4 бара) - годовой - значение за месяц (у нас усредненно 28 дней) начиная с текущего дня, на графике 12 баров

Arthur Irgashev
мне дальше нужно будет агрегировать вот эти нареза...

вот тут совсем другой разговор) Гляньте примеры: https://www.mongodb.com/docs/manual/reference/operator/aggregation/sum/

Arthur Irgashev
да

лучше как 4 отдельных запроса пускать

Arthur Irgashev
мне дальше нужно будет агрегировать вот эти нареза...

я бы вывод обрабатывал в приложении, а не пытался делать оверхард через СУБД, которая не для этого предназначена

Alexandrr
я бы вывод обрабатывал в приложении, а не пытался ...

групировка - это обычная задача бд, какой оверхед?

Vladyslav Hrehul
групировка - это обычная задача бд, какой оверхед?

группировка - это поиск по заданному условию, а не обработка и форматирование выводного результата

Alexandrr
группировка - это поиск по заданному условию, а не...

задайте себе вопрос: зачем вытаскивть всю бд, грузить ее на бек, чтобы сделать групировку, которая просто вернет avg. Когда тоже самое может сделать бд, быстрее и получить сразу готовый результат

Vladyslav Hrehul
задайте себе вопрос: зачем вытаскивть всю бд, груз...

какую всю бд? я написал такое? где? сделать 4 операции внутри с возможностью упереться в bson, о котором выше написали идея для слабой реализации с критическими точками и низкой отказоустойчивостью а вот вывести 4 нужных участка и разложить как нужно, переформатировать, это другое

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
2
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
кто-нибудь уже пробовал это?
Lencore
4
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
❓ Подскажите как сделать в группе телеги функцию (кнопку) пересылки сообщения где есть нарушение правил? Бот к каждому сообщению (по определенным ключам) добавляет снизу кнопк...
Alexander
4
Вопрос: Здравствуйте! У меня возникла проблема с использованием плагина Mall в OctoberCMS. Я использую все файлы и компоненты в их исходном виде, без изменений. Однако на стр...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
8
Карта сайта