Андрей
Кто знает, как можно в агрегировании задать группировку по интервалу в 5 минут, помогите пожалуйста? Никак не придумаю
Андрей
Мне нужно считать среднее по заданному интервалу, если выбрать интервал в 1 час - получается, а мне надо задавать произвольно количество минут, к примеру 5, и считать среднее за каждый интервал
Nick
а в каком виде хранится дата, что за час получается а за 5 минут нет?
Андрей
"created" : ISODate("2017-09-28T11:27:01.056Z")
Андрей
Я в $project добавляю поле - 'hour': {'$hour': '$created'},
Андрей
А 5 минут - опыта и ума не хватает
Андрей
Ой, спасибо
Ruslan
камрады, подскажите, как тестируете работу с монго? я для тестов веб приложения просто подсовывают другое имя БД и всё ок, но надо удалять БД, как это вы делаете в своих тестах
Timur
У меня перед каждым тестом делается remove() на всех коллекциях и накатываются фикстуры
Ruslan
ремове... а как гарантируешь, что это делается на тестовой бд?
Timur
Ну и заново коннект происходит на каждый тест
Ruslan
на боевой настроена аутентификация?
Timur
Во время коннекта пишется в коннекшн путь -test + randomstring
Timur
С dev и test окружений нет доступа к проду
Ruslan
во, рандом стринг, это хорошая идея
yopp
камрады, подскажите, как тестируете работу с монго? я для тестов веб приложения просто подсовывают другое имя БД и всё ок, но надо удалять БД, как это вы делаете в своих тестах
в CI генерировалось имя базы, с текущей датой и временем, названием конфигурации и номером билда. А дальше через ENV передавалась в приложение Тесты писались для параллельного выполнения, так что коллекции не удалялись/очищались. Плюс это защита от того момента когда кто-то случайно на продакшене запустит тест сьюит
yopp
Была отдельная таска, которой можно было почистить старые базы
yopp
Так что если какой-то билд завалил тесты, можно было сходить и посмотреть что в базе осталось, без необходимости где-то ещё раз гонять сьюит
Ruslan
мне нравится
Sergey
мощно
Sergey
Deleted Account joined the group
yopp
У меня написано German Pavlov
yopp
А вот теперь deleted account. Спамбот
yopp
Недолёт
Ruslan
не могу понять, DBRef стоит юзать или всё-таки эибедидь доки в друг друга
CC-BY-SA-4.0/Docker-ce30.0
Скорее всего лучше заимбеддить.
Ruslan
чем лучше?
Ruslan
а если 10 тыщ док, 30 тыщ...
Ruslan
эмбедидь 30 тыщ в одну доку?
Sergey
Если надо хранить в монге реляционные данные, значит что-то пошло не так на этапе выбора базы данных.
Ruslan
просто мне непонятно, инжектить в каждый из этой кучи документов другой документ... ну ок, можно но потом этот документ поменяется, придётся пробежаться по всем документам и подправить там внедрённый документ. это разве эффективно?
Artem
Почему их не хранить в двух разных коллекциях?
Artem
Вы просто пытаетесь перенести реляционный подход в монгу. Так это не работает
Ruslan
я и храню, но хотелось бы по DBRef связать
Ruslan
выдернул документ, а если надо дёрнул за ссылку, получил связанный
yopp
не устаю повторять: надо хранить документы так, как их потом будут читать
Ruslan
т.е. переколбасить кучу документов при небольшом изменении - это нормально?
yopp
нет
Ruslan
главное скорость чтения?
yopp
точнее да
yopp
но реальный ответ: зависит от кейса
yopp
если write workload и нужно соблюдать какой-то qos, то это одна история
yopp
если это read workload то другая
Ruslan
у меня пока редко происходит запись и чтение, кейс такой, просто админка, нагрузка по чтению пойдёт позже, сейчас я больше изучаю что да как
yopp
тогда делай как быстрее разрабатывается
yopp
если оно сейчас и с dbref работает — то и ладно
yopp
проблемы нужно решать когда их видно
Ruslan
работает
yopp
когда их не видно, их не нужно решать
yopp
ну тогда потрать эти силы на чонибудь полезное
Ruslan
питонский dereference возвращает строку, а не json
yopp
чтоб туда живые люди ходили, чтоб по настоящему дёргать начали. сразу станет видно где проблема
yopp
ты видать какой-то odm выбрал странный
Ruslan
aiomongodel
yopp
dbref на мой взгляд оверкилл, до него нормально работало и с обычным objectid
yopp
я не разбираюсь в питоне, к сожалению
yopp
нужно брать тот, у которого ишуёв на гитхабе больше закрыто
yopp
и коммитят куда постоянно
Ruslan
ну, это более менее свежий и в целом проблем не испытываю
yopp
¯\_(ツ)_/¯
Ruslan
в целом 🙂
CC-BY-SA-4.0/Docker-ce30.0
боюсь в aiomongodel ни слова про дереференс.
yopp
а там нет без извратов обычных Model-to-Model relations через foreign key?
CC-BY-SA-4.0/Docker-ce30.0
https://motor.readthedocs.io/en/stable/api-tornado/motor_database.html?highlight=dereference#motor.motor_tornado.MotorDatabase.dereference
CC-BY-SA-4.0/Docker-ce30.0
этот?
CC-BY-SA-4.0/Docker-ce30.0
говорят что документ возвращает.
Sergey
ODM для монги вообще юзать надо довольно аккуратно, он ошибок не прощает. В отличие от ORM для реляционных баз, где есть транзакции.
Dmytro
Такой вопрос: где ещё юзают MongoDB помимо веба?
Ruslan
в итоге сделал красиво: async def dereference(db, model_name, uuid): ref = DBRef(model_name, uuid) data = await db.dereference(ref) klass = getattr(models, model_name.capitalize()) model = klass().populate_with_data(data) return model
CC-BY-SA-4.0/Docker-ce30.0
Оберни в тройные бэктики
CC-BY-SA-4.0/Docker-ce30.0
Динамическая подлива.
CC-BY-SA-4.0/Docker-ce30.0
А названия моделей что, состоят из одного слова
yopp
Такой вопрос: где ещё юзают MongoDB помимо веба?
я щас конечно доебусь: но что значит «помимо веба»? щас большая часть софта с вебмордой
yopp
мы для промавтоматизации аналитику на монге делали почти десять лет назад
yopp
её щас для BI часто используют
CC-BY-SA-4.0/Docker-ce30.0
Иас облако.