Amine
Writing account info and update
Amine
So I think it's fine
Данила
Всем привет ! У меня есть коллекция на 20+ млн записей, в среднем один документ занимает 13 мб (много полей и много вложенности), и порядка 20 индексов на эти документы, сейчас база (mongo 4.4.1) начала подтормаживать на запросах findAndModify от 20ms-1s, есть подозрение что это связано с перестройкой индексов при вставке, вопрос как посмотреть сколько выполняется перестройка индексов ?
Данила
а сколько занимают индексы? что говорит explain на findAndModify? скорее всего проблема не в индексах, а в части поиска документов для обновления
findAndModify используется для обновления одного документа, индекс для поиска применяется, индексы примерно по 1,5 гб
ILIA
Приветствую , подскажи пожалуйста по Percona , устанавливаю percona , я же правильно понимаю что если 3 меня 3 конфиг сервера и 2 шарда по 3 сервера каждый . То я должен устанавливать Percona на каждый сервер и подключаться к нему непосредственно.
Y
Подскажите, как через метод find вернуть не само поле, а вычисляемое поле?
Nick
Подскажите, как через метод find вернуть не само поле, а вычисляемое поле?
Что подразумеваете под вычисялемым полем? Желательно примером
Y
Что подразумеваете под вычисялемым полем? Желательно примером
Ну как в реляционных базах данных, select selery, selery/3 as new_selery from table
Nick
Ну как в реляционных базах данных, select selery, selery/3 as new_selery from table
Для этого надо агрегации использовать В частности $project или $addFields стейджи
Y
У меня на самом деле проблема, в том, что метод find возвращает _id с типом ObjectId, а мне хотелось бы сразу получать типа String
Y
А так приходится обрабатывать в цикле...
Nick
У меня на самом деле проблема, в том, что метод find возвращает _id с типом ObjectId, а мне хотелось бы сразу получать типа String
Если лень почемуто это делать в коде, причем не очень ясно почему, то вот пример https://stackoverflow.com/a/51231012
Y
Если лень почемуто это делать в коде, причем не очень ясно почему, то вот пример https://stackoverflow.com/a/51231012
Я если честно в этом особой проблемы не вижу, но у коллег на ревью возник вопрос (сами коллеги конечно же представления не имеют, возможно ли это сделать сразу методами монги)
Nick
Я если честно в этом особой проблемы не вижу, но у коллег на ревью возник вопрос (сами коллеги конечно же представления не имеют, возможно ли это сделать сразу методами монги)
Вообще это как раз корректно делать трансформацию после получения из бд в строку и из строки в обджектИд перед запросом в бд, так проще отлавливать проблемы кривых типов. Хотя на условных нескольких тысячах доков это может иметь смысл утаскивать в бд, если язык медленный
Семен
Я тут делаю учебный проект по пдд тестированию и в процессе разработки выяснилось, что я хочу сделать пароль для админки Но вот где его зранить? на сервера вроде совсем глупая затея, а в бд он не вписывается в текущую архитектуру документа Нормальная ли схема для одного поля (может конечно добавится еще что-то) делать отдельный документ чисто для хранения хеша от этого пароля?
Семен
то есть получается у меня есть: - документ с билетами - документ с юзерами и их ответами И добавить еще один для хеша от пароля
Nick
то есть получается у меня есть: - документ с билетами - документ с юзерами и их ответами И добавить еще один для хеша от пароля
Если ответы храните в юзерах то и пароль туда же, т.к. пароль обычно как раз и есть часть инфы о юзере
Семен
Если ответы храните в юзерах то и пароль туда же, т.к. пароль обычно как раз и есть часть инфы о юзере
Это не часть инфы о юзере, это не его личный пароль Это единый пароль для входа в админку
IDONTSUDO
Это не часть инфы о юзере, это не его личный пароль Это единый пароль для входа в админку
if(req.body.password === 'veryStrong123!'){ next() } return res.status(400)
Егор
Добрый день, где можно почитать как асинхронная монго работает?
Nick
Добрый день, где можно почитать как асинхронная монго работает?
Что вы подразумеваете под "асинхронная монга"?
Nick
await coll.update_many() работа с монго через motor
В сырцы и доку драйвера и смотреть его код
Егор
Я не о том как код писать, а о том что - как работают асинк запросы? Как они не кофликтуют друг с другом - Что будет если у меня будет одновомренно 10 подключений ( а max_pool_size=10) и что произойдет когда я попытаюсь установить 11 и т . д.
Nick
Я не о том как код писать, а о том что - как работают асинк запросы? Как они не кофликтуют друг с другом - Что будет если у меня будет одновомренно 10 подключений ( а max_pool_size=10) и что произойдет когда я попытаюсь установить 11 и т . д.
Про конфликты именно исполнения запроса внутри монги, а не вызовов в драйвере, можно начать отсюда https://www.mongodb.com/docs/manual/faq/concurrency/ и далее по ссылкам внутри
Егор
Окей , спасибо.
Егор
А еще тогда можете на этот вопрос ответить пожалуйста? Что будет если у меня будет одновомренно 10 подключений ( а max_pool_size=10) и что произойдет когда я попытаюсь установить 11 подключение
Tim
Доброй ночи! Я новичок и ранее работал только с PostgreSQL и Oracle. Хотел бы предложить полезный проект на работе, связанный с MongoDB, который поможет оптимизировать или ускорить работу того или иного процесса. Что, по вашему мнению, может решить MongoDB, а классические PostgreSQL и Oracle не могут или могут существенно хуже?
Vise
db.createCollection("upiPupi", {validator:{$jsonSchema:{ При создании коллекции можно прикрепить схему валидации в монго . Если коллекция создана без схемы валидации, лобо хочется заменить схему валидации как это сделать?
Null
Подскажите есть ли проблема с утсановкой MongoDB на сервер Ubuntu и последующая работа с БД? Пишут что якобы блочат доступ, но я что то не поийму как и где? Вижу что с репозиториев Ubuntu можно скачать пакет 5 версии, а 7 там нету?
Null
Нет никаких проблем
А как же пишу что санкции все дела? Мол репозитории недоступны, хотя я проблем не вижу но подключится с Compass не могу что на 7 версию что на 5..
Назар
Всем привет. Использую mongoose и typescript. Обновил версию mongoose из 6 на 8 и там теперь нет LeanDocument<T>. Что вместо него?
Vise
В fastify пишу подключиться создать модель  user через монгус, а создает users . Пишу создать  tim модель, а создает tims что это за рофл такой?
E1ecti⁠
В fastify пишу подключиться создать модель  user через монгус, а создает users . Пишу создать  tim модель, а создает tims что это за рофл такой?
В схеме необходимо указывать { collection: "name" }, чтобы оно автоматически не придумывало им названия
Vise
В схеме необходимо указывать { collection: "name" }, чтобы оно автоматически не придумывало им названия
Спс в схеме два обьекта надо было. Первый обьект валидирует данные, а второй настройки и в настройках указал имя коллекции
Andrey K.
Приветствую , подскажи пожалуйста по Percona , устанавливаю percona , я же правильно понимаю что если 3 меня 3 конфиг сервера и 2 шарда по 3 сервера каждый . То я должен устанавливать Percona на каждый сервер и подключаться к нему непосредственно.
Установка через перкону мало чем отличается от установки пакетов не от перконы. Может, сообщество меня поправит, но я увидел разницу только в настройках конфиг-файла для systemctl юнита
Kvhqm
Приветули. Тут один кто-то сказал (я подслушал) что у монги нет из коробки возможности связать документы
Kvhqm
А что в таком случае айди с рефом коллекции?
Vise
А что в таком случае айди с рефом коллекции?
Предполагается вложенность или просто ключи связанных таблиц для повторного запроса
Nick
А что в таком случае айди с рефом коллекции?
это айди с рефом, просто поля не накладывающие никаких ограничений в отличии от foreign ключей, которые как раз про связывание и контроль целостности. Так что в монги доки не связываются на уровне БД, только на уровне приложения
Vise
Нужно сделать так чтоб при регистрации невозможно было зарегать нового пользователя с таким же ником (просто рандомное поле _id добавляется) как сделать ? На уровне приложения ? Поиск по коллекции ников, если нашелся ник то ,error ?
Vise
Хм db.students.createIndex( { "name": 1, "age": -1, "grade": 1 }, { unique: true } ) Или правильнее логин в индекс пихать?
Vise
Ок . Отправляю просто {"_id":"name","password":"fjdbdhdhjd"} и создается коллекция с уникальным именем name, при попытке создать повторно вылазит ошибка . Что может пойти не так ? Пока юзаю это
Nick
Ок . Отправляю просто {"_id":"name","password":"fjdbdhdhjd"} и создается коллекция с уникальным именем name, при попытке создать повторно вылазит ошибка . Что может пойти не так ? Пока юзаю это
Уникальный индекс гарантирует уникальность по значениям всех полей, указанных в нем. Т.е. в вашем случае выше будет предотвращаться появление дубля по связке name-age-grade. В этом же случае работает индекс по _id, который создается по умолчанию при создании коллекции. Пойти не так ничего не может
Vise
Первое что может пойти не так это неожиданности в валидации. Для всех текстовых полей нужно предусмотреть ограничение так ? Чтоб в поле логин не загрузили 1 гб текста
Vise
И еще вопрос в дополнительных ключах в схеме коллекции при подключении. Коллекция будет создана только с теми ключами обьектов которые указаны в схеме так? При отсутствии не обязательных колекция будет создана без них. И без пустых обьектов и без ошибки
Nick
В одну коллекцию в априоре?
Читайте внимательно
Vise
В один документ. Один документ это обьект добавления записи в коллекцию да?
Nick
В один документ. Один документ это обьект добавления записи в коллекцию да?
По сути да, из документов как раз и состоят коллекции
Vise
Я просто привык называть обьектами
Nick
Индексы, коллекции, бд - тоже объекты)
Vise
Хочется всеравно предусмотреть чтоб юзер не имел возможности гадить. Переполняя документ значениями во вред сайту, просто так переполняя базу
Vise
А. Вообще зачем отпускать далее в базу на валидацию когда лучше быстрее преградить ну так то да.
Vise
В базе можно хранить поле с типом buffer да? Фотографию. Если фотография имеет вес 10 мб. Будет созранено 10мб данных в поле с типом buffer да?
Nick
А. Вообще зачем отпускать далее в базу на валидацию когда лучше быстрее преградить ну так то да.
На фронте проверки простые, потом в бэке доп валидация форматная, логическая и бизнесовая
Nick
В базе можно хранить поле с типом buffer да? Фотографию. Если фотография имеет вес 10 мб. Будет созранено 10мб данных в поле с типом buffer да?
Хз, смотрите доку драйвера и как он работает с тем что вам надо и как именно хранит в бд. 10мб бинаря можно случайно преврать и в 20
Vise
const file4 = new Data({ binData: { type: 'Buffer', data: [1, 2, 3]}});
Vise
Да. Можно. Чтоб документ содержал весь контент вот что подумал
Vise
С типом буфер я уже работал . Это хорошо что есть поддержка
Y
Подскажите, как из бинарника вытащить данные в движке Motor
Y
Что за бинарник?
Binary.CreateFromBase64