Андрей
то есть собрать новый массив и потом присвоить doc.accounts = newAccountsArray ?
Андрей
var collection = db.getCollection("components"); collection.find({ "_id": NumberLong(752) }).forEach(function (doc) { var accountIds = []; doc.accounts.forEach(function (accId) { accountIds.push(new NumberLong(accId)); }); doc.accounts = accountIds; collection.save(doc); }); Сработало, спасибо
Alexey
Привет, коллеги! Подскажите пожалуйста, как мне добраться до mongod.conf сервера, который крутится в Docker контейнере?
Roman
Привет всем! Подскажите, возможно ли снять дамп без типов? "registerTimestamp":{"$numberLong":"1429594506335"} Без $numberLong
Ruslan
Привет, коллеги! Подскажите пожалуйста, как мне добраться до mongod.conf сервера, который крутится в Docker контейнере?
Привет. Вроде я ранее тебе писал как зайти в запущенный докер контейнер. docker ps — смотришь все запущенные контейнеры, берешь CONTAINER ID нужного (например 32b42dd4cc92) docker exec -it 32b42dd4cc92 /bin/bash И дальше смотришь что тебе нужно внутри контейнера
Alexey
Но это я так понял лишь шаблон для рантайм конфига
Anonymous
ps -ef в контейере попробуй
Anonymous
Должен выдать процессы контейнера, путь к конфигу передается через -f mongod-у
Anonymous
А может и вообще без конфига быть запущено, просто монгоду все в качестве параметров передано. Ну это будет видно в ps -ef
Anonymous
Добрый день! Есть ли у кого нибудь курсовая работа по реализации БД в mongodb?
Anonymous
Добрый, вечер. Кто может поделиться советом Создал монгу через docker-compose version: '3' services: mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example
Anonymous
пытаюсь подключиться по данной учетке к базе admin- пускает пытаюсь подключиться по данной учетке к базе my_custom_db- не пускает почему так? буду крайне признателен совету
Ilya
что значит подключиться в вашем случае? указанный выше пользователь может авторизоваться только в БД admin. Потом уже можно сменить базу (для консоли командой use my_custom_db )
Dmitriy
а база my_custom_db существует?
Semyon V
какова идеальная практика нормализации документов при работе с mongoose? вот есть у меня опциональные поля, по которым я в последствии хочу делать запросы. понятно, что если в некоторых документов их не будет, то индексируй/не индексируй – поиск по ним будет не эффективным. неужели нужно при создании документа ручками всегда писать в них null?
Semyon V
и что делать с существующими документами? пройтись по ним и добавить null ручками?
Semyon V
кто-то мне раньше здесь об этом сказал, что индексация работает только по полям, присутствующим во всех документах
yopp
кто-то мне раньше здесь об этом сказал, что индексация работает только по полям, присутствующим во всех документах
> db.commands.count() 1014 > db.commands.find({"target_collection_name": {$exists: false}}).count() 507 > db.commands.find({"target_collection_name": "totaly_fake"}).explain() … "inputStage" : { "stage" : "IXSCAN", "nReturned" : 0, "executionTimeMillisEstimate" : 0, "works" : 1, …
yopp
Ну или в случае с hit: "inputStage" : { "stage" : "IXSCAN", "nReturned" : 507, "executionTimeMillisEstimate" : 0, "works" : 508, "advanced" : 507,
yopp
¯\_(ツ)_/¯
yopp
4.2
yopp
там есть нюансы если вы захотите выбриать документы в которых поля нет, но это другая история
Semyon V
только у меня одинаково долго выбираются документы и где оно есть, и где его нет
yopp
это ошибка в модели данных
yopp
скорее всего у вас неявный полиморфизм
yopp
сделайте из него явный полиморфизм и используйте поле с указанием полиморфного класса вместо eq null/exists false
Semyon V
в плане в этом поле есть записи разных типов?
yopp
Сам документ является отображением полиморфного объекта
Sergey
Коллеги! Есть кластер MongoDB (пусть будет 4.0.последней версии) с N шардами. Иногда на одном из шардов по не имеющим значение причинам начинает наблюдаться повышенное латенси. Это неприятное, но не фатальное происшествие приводит к тому, что запросы, исполняющиеся на "заболевшем" шарде, полностью забивают коннекшен-пулы на сервисах и приводят к отказу всего кластера. Есть ли готовые способы борьбы с таким? Или нужно что-то своё колхозить?
yopp
можно чуть деталей?
Вероятнее всего у вас отсутствие каких-то полей связано с какой-то особой формой/версией/состоянием объекта. А это скорее всего полиморфизм
yopp
всё так, у меня это поле присутствует не во всех документах. и это проблема?
Если у вас нет поля, по которому можно определить к какому из классов относится конкретный документ, то да, это проблема
Semyon V
можно какой-то конкретный пример проблемный, пожалуйста?
yopp
В случае наличии такого поля, вы можете сделать compound или sparse индексы по полю с классом и специфическими для класса полями
yopp
Простой пример это класс «пользователь». Обычно он очень быстро начинает обрастать ролями. Например «покупатель» и «оператор». У каждой роли разные наборы полей.
yopp
Очень часто вместо того чтоб явно прописать к каким ролям относится пользователь, используются косвенные признаки
Semyon V
да, но почему это проблема, если выборку я делаю по одному конкретному полю, которое либо есть, либо нет
yopp
Это и есть невявный полиморфизм, который например требует для выборки всех операторов использовать условия в духе «нет поля код-оператора»
Semyon V
то есть по-хорошему мне нужно ещё одно поле, в котором будет, скажем, true/false, дублирующее наличие значения в оригинальном поле?
yopp
Нет, нужно или нормализировать документ, убрав полиморфизм или ввести явный идентификатор класса объекта
Semyon V
то есть для случаев, где значения нет, записать null?
Sergey
Увеличьте размеры пулов или уменьшите тайм-ауты для запросов. А ещё лучше, найдите причину по которой увеличивается время ответа
Этими способами можно увеличить запас прочности. Но это не решает задачу, что проблемный шард не должен прикладывать весь кластер. И конкретная причина не сильно важна. Понятно, что её можно и нужно чинить. Но важно также сделать систему фундаментально более устойчивой к таким видам сбоев.
yopp
Нет. Сделать так чтоб таких случаев вообще не было или сделать такие случаи явно завязанными на значение другого поля. Что у вас в документе хранится?
Semyon V
{ _id: ObjectId(“1”) } { _id: ObjectId(“2”), duplicateOf: ObjectId(“1”) } .count( { duplicateOf: { $exist: true } } )
yopp
Если у вас приложение упирается в настройку драйвера, которая выделяет ограниченное число соединений и в результате, приложение не укалывается в QoS, то это не отказ кластера, это отказ приложения
Sergey
Какой критерий «прикладывать кластер»?
Запросы, в силу длительного ожидания свободного коннекшена из пула, уходят с задержкой.
yopp
Кластер то доступен
Sergey
Так-то да.
Sergey
Но у нас же не терминологический спор :)
yopp
Следовательно необходимо увеличить размер пула.
yopp
Это не про терминологию, это про зону отвественности
yopp
Ака «где крутить ручки»
yopp
У вас есть две проблемы: 1) недостаточный размер пула, который приводит к отказу приложения в условиях увеличннног времени ответа 2) увеличенное латенси одного из шардов, вероятно из-за специфической нагрузки или неравномерной балансировки
Sergey
И 4) из-за багов в монге
yopp
Это всегда человеческий фактор
Sergey
Причин всегда хватает.
yopp
Баг в монге вы врядли выиграете ;)
Semyon V
А какие-то ещё опциональные поля есть?
конечно, вагон. неужели они мешают поиску по не относящихся к ним полям?
yopp
Вопрос тут в мешают или не мешают, а в том, есть или нет у вас скрытого полиморфизма. Если он есть, то тут применимы одни подходы, если его нет, то надо смотреть глубже и искать причину. Если это outlier и у вас только одно такое поле, то $exists: true покроется индексом, хотя селективность будет высокая
yopp
В смысле низкая
Semyon V
спасибо, конечно, но я всё-равно не понимаю что сделать чтобы исправить ситуацию
yopp
Разберитесь что у вас с моделью
Semyon V
можно указать на пример явного полиморфизма?
Sergey
@dd_bb, спасибо за ответ. Пулы подраздуем.
yopp
Что у вас этот документ отписывает?
yopp
@dd_bb, спасибо за ответ. Пулы подраздуем.
Поищите от чего у вас шард нагибается. Вероятно это праймари шард и ему не хватает ресурсов
Semyon V
вообще я использую typegoose. не знаю, помогает ли он в избежании подобных вещей. но документы все одной схемы, в которых произвольно или присутствуют или отсутвуют поля. есть вложенность
yopp
Это можно относительно легко решить, выделив какие коллекции наиболее нагружены и или их шардировать или тупо через зону прибить на другой шард и тоже шардировать
yopp
Что это за объект?