Андрей
то есть собрать новый массив и потом присвоить 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
Alexey
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 )
Anonymous
Dmitriy
а база my_custom_db существует?
Semyon V
какова идеальная практика нормализации документов при работе с mongoose?
вот есть у меня опциональные поля, по которым я в последствии хочу делать запросы. понятно, что если в некоторых документов их не будет, то индексируй/не индексируй – поиск по ним будет не эффективным.
неужели нужно при создании документа ручками всегда писать в них null?
Semyon V
и что делать с существующими документами?
пройтись по ним и добавить null ручками?
yopp
Semyon V
кто-то мне раньше здесь об этом сказал, что индексация работает только по полям, присутствующим во всех документах
yopp
Ну или в случае с hit:
"inputStage" : {
"stage" : "IXSCAN",
"nReturned" : 507,
"executionTimeMillisEstimate" : 0,
"works" : 508,
"advanced" : 507,
yopp
¯\_(ツ)_/¯
yopp
4.2
yopp
там есть нюансы если вы захотите выбриать документы в которых поля нет, но это другая история
Semyon V
Semyon V
только у меня одинаково долго выбираются документы и где оно есть, и где его нет
yopp
это ошибка в модели данных
yopp
скорее всего у вас неявный полиморфизм
yopp
сделайте из него явный полиморфизм и используйте поле с указанием полиморфного класса вместо eq null/exists false
Semyon V
в плане в этом поле есть записи разных типов?
yopp
Сам документ является отображением полиморфного объекта
Semyon V
Sergey
Коллеги! Есть кластер MongoDB (пусть будет 4.0.последней версии) с N шардами. Иногда на одном из шардов по не имеющим значение причинам начинает наблюдаться повышенное латенси. Это неприятное, но не фатальное происшествие приводит к тому, что запросы, исполняющиеся на "заболевшем" шарде, полностью забивают коннекшен-пулы на сервисах и приводят к отказу всего кластера. Есть ли готовые способы борьбы с таким? Или нужно что-то своё колхозить?
yopp
можно чуть деталей?
Вероятнее всего у вас отсутствие каких-то полей связано с какой-то особой формой/версией/состоянием объекта. А это скорее всего полиморфизм
yopp
Semyon V
Semyon V
можно какой-то конкретный пример проблемный, пожалуйста?
yopp
В случае наличии такого поля, вы можете сделать compound или sparse индексы по полю с классом и специфическими для класса полями
yopp
Простой пример это класс «пользователь». Обычно он очень быстро начинает обрастать ролями. Например «покупатель» и «оператор». У каждой роли разные наборы полей.
yopp
Очень часто вместо того чтоб явно прописать к каким ролям относится пользователь, используются косвенные признаки
Semyon V
да, но почему это проблема, если выборку я делаю по одному конкретному полю, которое либо есть, либо нет
yopp
Это и есть невявный полиморфизм, который например требует для выборки всех операторов использовать условия в духе «нет поля код-оператора»
Semyon V
то есть по-хорошему мне нужно ещё одно поле, в котором будет, скажем, true/false, дублирующее наличие значения в оригинальном поле?
yopp
Нет, нужно или нормализировать документ, убрав полиморфизм или ввести явный идентификатор класса объекта
Semyon V
то есть для случаев, где значения нет, записать null?
yopp
Нет. Сделать так чтоб таких случаев вообще не было или сделать такие случаи явно завязанными на значение другого поля.
Что у вас в документе хранится?
yopp
Semyon V
{ _id: ObjectId(“1”) }
{ _id: ObjectId(“2”), duplicateOf: ObjectId(“1”) }
.count( { duplicateOf: { $exist: true } } )
yopp
Если у вас приложение упирается в настройку драйвера, которая выделяет ограниченное число соединений и в результате, приложение не укалывается в QoS, то это не отказ кластера, это отказ приложения
yopp
Кластер то доступен
Sergey
Так-то да.
Sergey
Но у нас же не терминологический спор :)
yopp
Следовательно необходимо увеличить размер пула.
yopp
Это не про терминологию, это про зону отвественности
yopp
Ака «где крутить ручки»
Semyon V
yopp
У вас есть две проблемы:
1) недостаточный размер пула, который приводит к отказу приложения в условиях увеличннног времени ответа
2) увеличенное латенси одного из шардов, вероятно из-за специфической нагрузки или неравномерной балансировки
yopp
Sergey
Sergey
И 4) из-за багов в монге
yopp
Это всегда человеческий фактор
Sergey
Причин всегда хватает.
yopp
Баг в монге вы врядли выиграете ;)
yopp
Вопрос тут в мешают или не мешают, а в том, есть или нет у вас скрытого полиморфизма. Если он есть, то тут применимы одни подходы, если его нет, то надо смотреть глубже и искать причину.
Если это outlier и у вас только одно такое поле, то $exists: true покроется индексом, хотя селективность будет высокая
yopp
В смысле низкая
Semyon V
спасибо, конечно, но я всё-равно не понимаю что сделать чтобы исправить ситуацию
yopp
Разберитесь что у вас с моделью
Semyon V
можно указать на пример явного полиморфизма?
Sergey
@dd_bb, спасибо за ответ. Пулы подраздуем.
yopp
Что у вас этот документ отписывает?
Semyon V
вообще я использую typegoose. не знаю, помогает ли он в избежании подобных вещей. но документы все одной схемы, в которых произвольно или присутствуют или отсутвуют поля. есть вложенность
yopp
Это можно относительно легко решить, выделив какие коллекции наиболее нагружены и или их шардировать или тупо через зону прибить на другой шард и тоже шардировать
yopp
yopp
Что это за объект?