Nick
Всем привет, ребят , если я добавил еще одно поле в схему mongoose с default : true, то тогда я должен все документы в базе сделать updateMany и вставить это поле ?
можно этого вообще не делать, монгус сам проставить дефолтное значение в полученном доке если его там не было и при следующем апдейте его занесет в базу
Eugen
просто я это поле добавил и сейчас делаю find() и там этого поля нету..
Eugen
и в этом проблема
Oleh
@here администрация, разбаньте @artoleksii (забанили при входе в группу)
Roman
Ребят, простенький вопрос. Есть коллекция users, в ней поле с типом массив объектов - settings. Если мне нужно обновить все документы, в которых нет одного объекта, как это лучше всего сделать? Проходить по курсору forEach с проверкой?
Pan
что могут спросить на собесе по монго?
☮️ Alex
У разраба? индексы, как запросы строить - аггрегация там..
Viktar
что могут спросить на собесе по монго?
Я обычно спрашиваю какие задачи делали и как. Рассказываю про текущие проблемы и спрашиваю как бы решали.
Viktar
Я джунов не собеседую)) смысла нет. Берешь на практику и смотришь как развивается.
Pan
нууу интересно что в этой фирме скажут и как)
Viktar
Подготовьте рассказ, что делали и как. Спросите какие проблемы есть. Проявляйте интерес. У Джуна самый главный скил должна быть коммуникабельность. Надо быстро научиться спрашивать и показывать результат.
Pan
язык то не родной, к сожалению ((
Viktar
Бывает. Не стесняйтесь. Главное, что бы вас и вы понимали о чем речь.
Pan
ну та да а еще я думал вот, как я должен объяснять это все, если я работал не напрямую с монго, а через библиотеку mongoose
Антон
от чего зависит размер индекса? например у меня для id(просто UUID, не ObjectId) индекс весит 4 мб, а на другое поле в этой же коллекции уже 900 кб и еще вопрос по монго атлас(а может это не к ней относится) - почему в статистике по использованию индексов пишется, что индекс использовался 2 недели назад, хотя я вот только что делал выборку по этому полю?
Антон
для чего хотите использовать эту инфу об индексах?
Интересно просто. Разбираюсь почему запрос долго выполняется, полез смотреть индексы, и там обратил на это внимание
Nick
Интересно просто. Разбираюсь почему запрос долго выполняется, полез смотреть индексы, и там обратил на это внимание
на размеры индексов надо будет обращать внимание когда они гдето в четверть-половину оперативы перестанут помещаться и у вас нет явного разделения на холодные/горячие данные и вы делаете запросы прямо по всем данным случайно
Nick
можно иметь 60+Гб индекс на тачке с 32Гб озу и не испытывать проблем изза того что именно горячий кусок индекса занимает много меньше места
N
ребятулики. http://ipic.su/img/img7/fs/kiss_7kb.1604326530.png пытаюсь подключиться, username & password пишу свои (проверил, перепроверил)... http://ipic.su/img/img7/fs/kiss_14kb.1604326681.png получаю ошибку( как поправить? и что писать в dbname? на всякий случай написал название кластера
N
http://ipic.su/img/img7/fs/kiss_14kb.1604326681.png
N
такс, еще раз. создал юреза со всеми правами. Ввел, ошибка та же
Veaceslav
Ребят я правильно понимаю что запись вида {$set: {myArray.$.myField: 10}} должно обновить только поле myField в объекте который мы нашли в myArray ? Просто я пробовал сейчас так сделать и другие поля которые есть в этом объекте просто удаляются, то есть обновляется весь объект а не поле. Можете плиз подсказать как бы мне обновить только поле myField ?
Veaceslav
такс, еще раз. создал юреза со всеми правами. Ввел, ошибка та же
Обычно в качестве базы нужно написать имя коллекций с которой ты будешь работать. Ну типа myFirstDatabase.
E
ребят у кого получилось завести докер с монгой и конфигом?
E
вообще не стартует (
E
либо же просто зависает
Анатолий
ребят у кого получилось завести докер с монгой и конфигом?
почему тут использовали -f а во втором варианте —config ?
E
почему тут использовали -f а во втором варианте —config ?
решил проблему, сори. - не зависло а просто запущено не в detach режиме. и просто запустилось без инфы
E
чтоб узнать дебаг инфу и логи - примонтировал log от mongo снаружи контейнера
Joe
Наверно только ты и скучаешь
Константин
Парни, всем привет. Подскажите как правильно создать индекс большой. Через юи компаса и консоль в нем же, падает по таймауту, в списке индексов получается индекс на 4кб и всё
Константин
Плюс непонятно как убивать зависшие операции, он пишет нет прав админа, но мой юзер админ )
Константин
Или может кто сможет проконсультировать предметно и оплачиваемо? )
Vladimir
Господа, подскажите. Я в Атласе сделал пиринг с АВС впц. Как мне теперь серый адрес кластера?
Анатолий
Как тебе серый адрес кластера?
Vladimir
ой, сорри ))
Vladimir
как мне узнать серый адрес кластера ))
Vladimir
Это что?? спам, что ли?
Viktor
Это что?? спам, что ли?
сорри, реально окно перепутал
Joseph
Всем доброго вечера , есть какой способ подменить _id на id использую mongoose опционально у схемы есть id но это геттер и искать конечно же по полю id нельзя
Dmitrii
прочитал статью про локи и канкарентный доступ к ресурсам в монге https://docs.mongodb.com/manual/faq/concurrency/ но почти ничего не понял, есть ли какие то еще ресурсы, которые могут просветить эту тему?
Dmitrii
А какие именно вопросы возникли?
хотел в целях обучения попробовать сделать distributed lock по верх монги начал разбираться с операциями findOneAndUpdate/updateOne, а конкретно, как залочить документ в коллекции(например флаг locked:true), чтобы другие подключенные клиенты, не могли его залочить на себя и понял, что не хватает знаний о выполнении операций read/write
Viktar
Я считаю, что если надо лочить, то не правильно выбрана база
Viktar
Функционал монги не подразумевает блокировки. А делать их своими силами нет смысла когда есть решения с блокировками
Bogdan
Привет, как правильно делать $subtract между одним полем (total) и тем же полем (total), но из предыдущей записи (сорт по времени). Пример ниже, нужно выводить разницу цен (статистика) db.sales.insertMany([ { "_id" : 1, "item" : "abc", "price" : 10) }, { "_id" : 2, "item" : "jkl", "price" : 20) }, { "_id" : 999 "item" : «uhv», "price" : 28) }, ])
Анатолий
Функционал монги не подразумевает блокировки. А делать их своими силами нет смысла когда есть решения с блокировками
это не самая редкая операция - лок документа чтоб другие не лезли, а поднимать для этого "специальную" базу и дублировать туда данные так себе затея, когда можно просто поле добавить и посмотреть результат операции
Анатолий
другое дело если локать собираются не документ а как семафор использовать этот функционал, тогда да, это плохая идея
Dmitrii
Я считаю, что если надо лочить, то не правильно выбрана база
это не продакшен, хотел сделать очередь задач, чтобы лучше разобраться в монге есть коллекция с задачами, и N процессов, которые эти задачи выполняют, по одной, при этом два разных процесса не должны обрабатывать одну и туже задачу
Dmitrii
при апдейте возвращает количество измененных документов, если локаете то вам вернется 1, если локаете залоченый, вернется 0, так вы точно узнаете это вы залокали документ или нет
поэксперементирую с этим, а есть ли возможность сделать операцию read/write долгой или поставить брейкпоинты как дебагере? чтобы например явно из двух процессов поэкспемерементировать с БД и посмотреть как она себя ведет при канкарентных операциях, сэмулировать рейс кондишен?
Анатолий
оставь одну запись и запусти 10 воркеров
yopp
Например атрибут locked_by с пидом/fqdn воркера для лока, поле locked_at для контроля за нештатно завершёнными задачами через тайм-аут
yopp
Воркеры делают findAndModify/updateOne запросы с условием {locked_by: None} и set {locked_by: OwnId, locked_at: CurrentTime}, с опциональной сортировкой по какому-то атрибуту, например scheduled_at. Воркер в один запрос получит задачу, пустой ответ или в очень редком случае конфликт
Dmitrii
понял 👍
yopp
locked_at можно использовать как $or в запросе, но в этом случае задача может ещё выполняется. Это можно решить периодическим обновлением locked_at
Viktar
Я так понимаю надо ждать пока другой воркер не отпустит документ. В этом случае документ не попадет в выборку
Viktar
Я все таки считаю, что реализовывать систему блокировок самостоятельно, слишком дорого. Лучше использовать те продукты, где это есть из коробки
yopp
Когда нужно блокировать один документ, особого смысла в db level locks нет
Viktar
Да. Но есть шанс потерять апдейт
yopp
Да. Но есть шанс потерять апдейт
Во-первых, потому что там появится новый пласт проблем, типа лайв или дедлоков
yopp
Единственная проблема это stale документы, у которых из-за нештатного завершения процесса который держит лок остался заблокированный статус. Но это решается полем с датой
yopp
В итоге вся блокировка сводится к одному запросу, разблокировка к ещё одному запросу
yopp
Редкий случай: write конфликт, когда два процесса попытались обновить один документ, но в 4.2 это уже решено прозрачным retry внутри монги, а до 4.2 решается обработкой исключения и повторным запросом
Viktar
Я не спорю, что это реализовать нельзя. Это надо разрабатывать это раз, тестировать это два. Доп ресурсы на поддержку.