Max
Что ничего не продолбу и не свалю
Max
Мне кажется что моё желание более чем естественное, или я ошибаюсь? @gormartsen ?
Gor
Мне кажется что моё желание более чем естественное, или я ошибаюсь? @gormartsen ?
это должно решаться на стороне app и стратегии deploy on production
Max
как бы немного в теме что тебе надо, но как такое делать с монгой- хзхз ибо там нет принудительной схемы (хотя в последних версиях уже что то типа того есть)
Ну схемы в монге то нету, но де-факто она есть во всяких ODM-ках, в подавляющем большинстве популярных языков
Gor
вообщем или смотришь для той ODM что используешь решения миграции, или приколачиваешь какой готовый вариант
Gor
там по сути то просто - currentSerialNumber примененый и набор кода с привязкой к serialNumber
Gor
самая засада - это rollback
Max
вообщем или смотришь для той ODM что используешь решения миграции, или приколачиваешь какой готовый вариант
Ага, спасибо, видел я такие. Просто хотелось знать как правильно это делать с монгой)
Max
самая засада - это rollback
Ну если ничего не удалять, то тривиально
Max
Руками прописывать down
Gor
Ну если ничего не удалять, то тривиально
не совсем. или описывать в каждой миграции стратегию rollback или какой комбайн который знает как его делать. например в миграции тебе надо всем документам свойство created поменять на createdAt
Gor
что по сути порождает еще целую серию тестов - самой стратегии миграции
Gor
вот это глянь немного в тему
Gor
Database migrations in Golang https://lanre.wtf/blog/2019/01/02/database-migration-golang
yopp
Миграций в монге нет, потому что нет схемы. Миграции часть бизнес-логики. Чтоб не было больно, делать только append only миграции, которые только добавляют новые поля, но не меняют или удаляют старые.
yopp
Иначе будут проблемы с роллбэками, как было отмечено выше. Когда надо серьёзно чистить данные делать миграцию в новую коллекцию
yopp
Все остальное будет очень больно, долго и тяжело
Gor
про append only
Gor
и про миграцию через смену коллекции
yopp
Плюс такого подхода что несколько версий приложения могут работать одновремено. Роллбэк в итоге это откат логики, а не данных.
Gor
и он лучше сочитается с deploy стратегиями как я вижу. как canary так и обычный blue/green
Max
и про миграцию через смену коллекции
А если коллекция тяжелая? Не много ли оверхеда?
Gor
оправданый для меньше боли в случае rollback
Gor
А если в целях рефакторинга мне нужно сменить вложенность в коллекции, хочу сделать их более плоскими
точно бы через смену коллекции делал. иначе rollback только через backup restore
yopp
А если коллекция тяжелая? Не много ли оверхеда?
Когда размер документа будет _реальной_ проблемой, тогда можно избавиться от старого сделав миграцию в новую коллекцию.
Max
Хорошо, буду пробовать, спасибо!
yopp
Это контр-интуитивно, но обновление данных это гораздо более сложная задача, чем добавление. И чем больше данных, тем дороже будет обновлять и тем большая проблема сделать роллбэк.
yopp
Append-only вообще можно ленивым делать.
Nick
На дворе 2019 и транзакции в монге
Павел
Я могу сделать аггрегацию на данных после .find?
Nick
Я могу сделать аггрегацию на данных после .find?
нет, используйте $match в агрегации
Павел
нет, используйте $match в агрегации
мне нужно как-то отсортировать результат выборки по полю обджекта который в массиве, при условии что одно из полей обджекта проходит по условию, т.е мне этот обджект надо сматчить и тогда сортировать по его полю
Павел
вот хз как
Nick
думаю после этого вы сможете придумать как вам сделат ьвыборку
Artem
Не кто не подскажет, делать пагинацию по принципу search after (когда сортируем по определенным полям и берем записи отталываясь от етих полей) на mongodb есть смысл или она по производительности будет такой же как limit, offset ?
Artem
относительно больших объемов данных
Nick
при наличии индексов, либо при досточно редких изменений данных - да
Nick
если можно смело терять новые доки, то тоже можно
Nick
терятсь в смыле не показывать в выборках
Artem
@yatoba да отлично, спс
Owly
Здравствуйте, подскажите пожалуйста можно ли во всех документах такого типа { "_id" : ObjectId("51780fb5c9c41825e3e21fc5"), "name" : "Literature", "students" : [ ObjectId("51780f796ec4051a536015d0"), ObjectId("51780f796ec4051a536015d0"), ObjectId("51780f796ec4051a536015d2") ] } где в students есть ObjectId("51780f796ec4051a536015d2") удалить этот id 51780f796ec4051a536015d2 ?
Owly
Спасибо)
Andrew
приветствую.. вопрос работает ли конструкция {$push: {$each: [...]}} в $project или $group ? mongo 2.6.12 - такая досталась и другой нет или же есть какой-то способ при агрегации впихнуть какие-то поля в одно? типа aggregate([ {$group: { '_id': '$_id', 'croc': [$hogwarts.ppl.age, $hogwarts.onion.title]}} ]) не спрашивайте зачем именно так... просто надо и, если есть возможность, пример запроса для 2.6.
!Древній Укр
ребята подскажите че так
!Древній Укр
!Древній Укр
если смотреть в базу там почти гиг а дамп 162М
Nick
вы неправильно смотрите
Nick
смотрите количество документов
Nick
это будет хоть какойто показатель
Nick
сделайте рестор из дампа в чистую коллекцию и сравните количество доков
!Древній Укр
wc -l ?
!Древній Укр
типа кол-во файлов в дампе ?
!Древній Укр
обновил до 4 версии теперь не запускаеться
!Древній Укр
!Древній Укр
куда смотреть ?
Artyom
в логи
!Древній Укр
в логах тоже не особо
Andrew
должно работать в group https://docs.mongodb.com/manual/reference/operator/aggregation/group/#accumulator-operator
не... это понятно, что, собственно, $push - работает, но вот $push: {$each - не хочет... хотя оно наверное будет работать при апдейте, правда он в этом случае мне не нужен... однако, спасибо за отклик
!Древній Укр
[mongodb-org-4.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
!Древній Укр
yum install -y mongodb-org
!Древній Укр
(была 2.6)
Nick
https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/
Nick
читаем https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/
Nick
To upgrade from a version earlier than the 3.6-series, you must successively upgrade major releases until you have upgraded to 3.6-series.
Nick
соотвевенно топаем по цепочке и устанавливем все апдейты
Nick
поочередно
Nick
либо дампим, удаляем все, и папку с данными монги и устанавливем по новой уже 4 версию и ресторим дамп
Andrew
что пишет при попытке использовать?
....aggregate([{'$group': {'_id':'$_id', 'c': {'$push': {'$each': '$categories'}}}}]) exception: invalid operator '$each' 2.6.12