Anonymous
да лучше удалять, тогда вы будете контрлироват ьвремя, а не хз откуда оно к вам попало
что-то пошло не так, и теперь ошибка та же но про другое поле. { MongoError: Updating the path 'publishedDate' would create a conflict at 'publishedDate' Вот код обновления: Blogpost.findByIdAndUpdate(req.params._id, { $set: req.body, $currentDate: { lastUpdate: true }}, { new: true }) .then Не понимаю, что происходит. Особо ничего не менял и работало нормально.
Nick
что внутри req.body ?
Anonymous
что внутри req.body ?
и publishedDate и lastUpdated даты как строка есть. я сейчас вспомнил, что есть ещё хук BlogpostSchema.pre("findOneAndUpdate", function(next) { let query = this; console.log(query._update["$set"]) if (query._update["$set"] && query._update["$set"]["published"] === true) { this._update["$currentDate"]={ lastUpdate: true, publishedDate: true } } else { this._update["$currentDate"]={ lastUpdate: true } } next() })
Nick
значит два поля надо дропать
Anonymous
значит два поля надо дропать
ага, дропнул, вроде помогло, спасибо.
Alexandr
Добрый день) Подскажите пожалуйста, есть документ внутри которого макссив обьектов (одно из полей - дата). Хочу достать документ и чтобы в массиве пришли только записи, которые соответствуют диапазону дат. Пробовал вот так: db.accounts.find({ '_id': ObjectId("5c5a932b28170b2932047be6")}, { $and: [ {operations: {'$elemMatch': {timestamp: {'$gte': new Date("2018-12-06")}}}}, {operations: {'$elemMatch': {timestamp: {'$lte': new Date("2019-02-06")}}}} ] }); Но так не работает. Или такое можно сделать только через аггрегацию?
Nick
вам нужно чтобы в массиве вернулись только объекты которые в диапазоне? а не весь массив, который внутри основного дока?
Nick
монга возвращает документ в для которого найден хотя бы один элемент в массиве удовлетворяющий вашим услвоиям, поэтомы вы получаете все сразу. Так что да вам либо агрегации либо просто фильтровать на клиенте
Alexandr
Понял, спасибо)
Oleg
привет, подскажите, а а база config - зарезервированное?
Oleg
обновлялся с 3.4 -> 3.6 отловил 2019-02-06T12:39:09.788+0200 F - [rsSync] terminate() called. An exception is active; attempting to gather more information 2019-02-06T12:39:09.798+0200 F - [rsSync] DBException::toString(): DatabaseDifferCase: Failed to create the config.transactions collection due to db already exists with different case already have: [Config] trying to create [config] Actual exception type: mongo::error_details::ExceptionForImpl<(mongo::ErrorCodes::Error)13297, mongo::AssertionException>
Oleg
потому что существует пользовательская база Config 🤬
yopp
да, это зарезервированная системная база
yopp
https://docs.mongodb.com/manual/reference/config-database/
yopp
это нормально, что сейчас дождь идёт? :)
Nick
в офисе норм
Nick
походу лив
AstraSerg
yopp
совсем не понимаю как так
Oleg
Привет, подскаждите: /bin/mongorestore --db ... она восстаналивает всю базу? пересоздаёт её или доливает отстутсвующие коллекции?
yopp
https://docs.mongodb.com/manual/reference/program/mongorestore/#behavior
yopp
совсем не понимаю как так
приходят люди с проблемой, начинаешь задавать вопросы, они обижаются и уходят
yopp
шутишь, они тоже обижаются и уходят
yopp
ничего не делаешь, они тоже обижаются и уходят
yopp
¯\_(ツ)_/¯
AstraSerg
люди разные, эмоцеонально реагировать на их поведение не стОит.
Oleg
шутишь, они тоже обижаются и уходят
спасибо. просто обычно такие вопросы потому что что-то произошло.
yopp
люди разные, эмоцеонально реагировать на их поведение не стОит.
а никто и не эмоционирует. это философское рассуждение
Oleg
Oleg
факап. обновить кластер с 3.4 -> 3.6 -> 4.0 хотел. оказалось была пользовательская база Config. причем это о том что это проблема - выяснилось когда обновили все ноды кроме текущего мастера, и попытались заставить сменить ноде роль мастера на секондари при этом все секондари которые хотели примерить на себя эту роль, падали с той ошибкой "DBException::toString(): DatabaseDifferCase: Failed to create the config.transactions collection due to db already exists with different case already have: [Config] trying to create [config]"
yopp
других вариантов нет совсем
yopp
либо разворачивайте в другой базе, если можете поменять название
Oleg
а факап заключается в том, что попытался переменовать базу. точнее явной команды переименовать нету, но есть возможность скопировать, переделать авторизацию, и удалить старую. удалил не ту базу
yopp
соболезную
yopp
бекап есть?
Oleg
да, но.
Oleg
в принцпе он делался командой /bin/mongodump --username "$DUMPUSER" --password "$DUMPPASS" --authenticationDatabase admin --out ${CURBACKUPDIR} --gzip 2> dump.log
Oleg
вроде всё понятно если восстанавливать поштучно базы на standalone. раньше приходилось , но не понятно как восстанавливать базу admin для кластера.
yopp
а в чём проблема?
Oleg
креденшелсы. под каким логином возможно всё делать?
Oleg
нехватка опыта короче
yopp
https://docs.mongodb.com/manual/tutorial/enable-authentication/#start-mongodb-without-access-control
yopp
запускаете без атутентификации одну ноду
yopp
заливаете туда всё что надо
yopp
запускаете её в rs
yopp
добавляете остальных
Oleg
какая последовательность действий? вроде создаю пустой сервер. standalone создаю админский логин под ним восстаналиваю все базы. потом у меня возникли проблемы чтобы создать replicaset, похоже нехватка привелегий после восстановления базы admin
Oleg
https://hastebin.com/aceguzovuk.py
yopp
ну значит вы не под тем пользователем это делаете
yopp
в смысле не под теми привилегиями
Oleg
а вот так с логин-паролем
Oleg
https://hastebin.com/lususilejo.sql
Oleg
похоже у меня не осталось логина с необходимыми привелегиями для выполнения команды rs.initiate()
Oleg
а можно ли как-то залить базу admin из бекапа в пустой сервер, какая команда? какие конфиги (вот текущий https://hastebin.com/pujifavaka.shell ) ?
yopp
db.runCommand( { connectionStatus: 1, showPrivileges: true } )
yopp
смотрите какие у вас есть привилегии
yopp
если чего-то не хватает, перезапустите без аутентификации добавьте туда недостающих
yopp
насколько я помню чтоб монга восстановила пользователей, это надо указать явно https://docs.mongodb.com/manual/reference/program/mongorestore/#cmdoption-mongorestore-restoredbusersandroles
Oleg
ясно, похоже надо было дать "role" : "root",
V
ребят а есть совет как обновить монгу с версии 3.4 до последней?
Oleg
ну в документации есть инструкция. обновляете до последней 3.4, потом 3.4 ->3.6 -> 4.0
Ivan
А никто не знает, почему монговцы не хотят mongo 3.6 (только 4.0+)на ubuntu 18?
yopp
А чего вам не хватает на play.db-ai.co? Большой брат говорит что никто в итоге им не пользуется.
yopp
На этой неделе я выкачу туда нормальный парсер запросов и добавлю FindAndModify и включу отображение explain. Из большого останется только добавить табы для коллекций и индексы, что я допилю на следующей. И что дальше? Какой инструмент вам нужен?
yopp
Ох. https://github.com/Homebrew/homebrew-core/pull/36078
yopp
Тут кто-то спрашивал почему с монгой проблемы в репозиториях всяких там линуксов
yopp
Потому что истерички
Oleg
возможно ли создание репликасет к примеру из трех нод, в условиях когда доступна только одна нода, а две ноды не готовы, не доступны ?
Andrew
Господа, такой нубский вопрос. Стоит ли и когда использовать рефсы ( связи между таблицами ) К примеру, у меня есть блог. Где есть Пост у которого есть поля mes, id. И есть коммент, у которого есть поле mes и post_id В доке монги сказано, что желательно хранить всё в одном документе. Т.е. в случае выше, мне стоило бы сделать у post массив comments куда пушить комменты? Соб-сно суть вопроса. Есть ли какой-либо пример по БД типа блог, где, на ваш взгялд, правильно использованы рефы в монге?
Nick
в монге рефов нет
Andrew
в монге рефов нет
Окей, а что это такое тогда? https://docs.mongodb.com/manual/reference/database-references/
Nick
это просто соглашение, которое драйвера могут реализовать при желании
Andrew
это просто соглашение, которое драйвера могут реализовать при желании
В таком случае, следуя моему вопросу, как мне правильно создать документ поста у блога?