Anonymous
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
значит два поля надо дропать
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
вам нужно чтобы в массиве вернулись только объекты которые в диапазоне? а не весь массив, который внутри основного дока?
Alexandr
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
¯\_(ツ)_/¯
AstraSerg
люди разные, эмоцеонально реагировать на их поведение не стОит.
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
других вариантов нет совсем
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?
h1dw0w
yopp
А чего вам не хватает на play.db-ai.co?
Большой брат говорит что никто в итоге им не пользуется.
yopp
На этой неделе я выкачу туда нормальный парсер запросов и добавлю FindAndModify и включу отображение explain. Из большого останется только добавить табы для коллекций и индексы, что я допилю на следующей.
И что дальше? Какой инструмент вам нужен?
yopp
Ох. https://github.com/Homebrew/homebrew-core/pull/36078
yopp
Тут кто-то спрашивал почему с монгой проблемы в репозиториях всяких там линуксов
yopp
Потому что истерички
Eugene
Oleg
возможно ли создание репликасет к примеру из трех нод, в условиях когда доступна только одна нода, а две ноды не готовы, не доступны ?
AstraSerg
Andrew
Господа, такой нубский вопрос. Стоит ли и когда использовать рефсы ( связи между таблицами )
К примеру, у меня есть блог. Где есть Пост у которого есть поля mes, id. И есть коммент, у которого есть поле mes и post_id
В доке монги сказано, что желательно хранить всё в одном документе.
Т.е. в случае выше, мне стоило бы сделать у post массив comments куда пушить комменты?
Соб-сно суть вопроса. Есть ли какой-либо пример по БД типа блог, где, на ваш взгялд, правильно использованы рефы в монге?
Nick
в монге рефов нет
Andrew
в монге рефов нет
Окей, а что это такое тогда?
https://docs.mongodb.com/manual/reference/database-references/
Nick
это просто соглашение, которое драйвера могут реализовать при желании