✙ Nikita
👍
Anonymous
есть поле sections типа Object, mongoose при finByIdAndUpdate записывает только timetables, а я хочу чтоб записалось все, как это сделать?
Anonymous
если все подполя пустые объекты, то запишутся все, но тогда при findById он мне sections не возвращает вообще, с этим тож можно что нибудь сделать?
Anonymous
разобрался, нужен был minimize: false в схеме
Google
Всем привет можете помочь исправить ошибку Centos 7 x64 Mongodb 4.0 / 4.2 пробовал переустановить
Александр
напомните сколько у вас записей и какой размер записи?
30кк юзеров, на каждого по паре килобайт примерно.
Viktar
У вас и с индексом будет быстро отрабатывать
Viktar
Не думаю, что шардирование даст заметный перформанс
Viktar
У меня 200кк записей и 16 КБ на запись. Шардирование не дало большого профита, только по специфичным запросам. Таким как поиск в массивах где по 10к элементов может быть
Александр
Начальство переживает) в любой непонятной ситуации должна быть возможность закидать проблему железом)
yopp
У меня тут про Shard key вопрос) Я раздел доки прочитал, но всё равно не понял. Есть юзеры, у каждого может быть привязан 1 или несколько email'ов. Там ещё всякая разная инфа может быть, но поиск только 1 документа по user_id, или 1 документа по email (уникальная строка). Какой должен быть ключ/индекс? { user_id: 1, emails: 1} где user_id - целое число, emails - массив строк как будет поиск по user_id работать понятно, но как по email, если я user_id ещё не знаю?
Шард ключ необходим для балансировки данных по шардам. Если в запросе префиксом является шард ключ, то такой запрос /адресуем/ на конкретный шард. Если нет, то такой запрос будет широковещательным и потребует склейки на mongos. Если ваш запрос покрывается любым существующим индексом, то индексы будут использоваться независимо от ключа шардирования, но только в широковещательном режиме
yopp
В зависимости от того, какую проблему вы хотите решить шардированием будет понятно какая стратегия для вас является более оптимальной
Александр
В зависимости от того, какую проблему вы хотите решить шардированием будет понятно какая стратегия для вас является более оптимальной
В этой коллекции запросы будут только вида findOne. Либо по id юзера, либо по любому из привязанных email’ов. Цель прибить данные каждого юзера к конкретному шарду. Ну и при поиске ходить только на 1 шард. С остальными коллекциями таких проблем нет.
yopp
В этой коллекции запросы будут только вида findOne. Либо по id юзера, либо по любому из привязанных email’ов. Цель прибить данные каждого юзера к конкретному шарду. Ну и при поиске ходить только на 1 шард. С остальными коллекциями таких проблем нет.
Из этих двух запросов вы можете покрыть шард-ключом только один. Если задача собрать данные одного пользователя на одном шарде, то имеет смысл сделать id пользователя префиксом шард-ключа
yopp
Но в этом случае запросы по email будут широковещательными
yopp
Самый простой способ это выделить почтовые адреса в отдельную коллекцию
Александр
Самый простой способ это выделить почтовые адреса в отдельную коллекцию
Попробую раздробить. Думаю ничего страшного. Спасибо)
yopp
Попробую раздробить. Думаю ничего страшного. Спасибо)
Перед этим стоит проверить насколько дорогие широковещательные запросы. Если вы используете полное совпадение, то скорее всего потеряете немного в latency и возможно появится дополнительный cache pressure, на хранение верхних уровней дерева
Artem
Как задать стартовый null в mongoose? { type: String, required: true, default: null } Ругается, что не передал, когда создаю с undefined
Artem
setDefaultsOnInsert
Спасибо
SuleYman
Приветствую, хочу понять зачем создается "_id": { "$oid": - такая сущность в документе? Хочу сделать db.getCollection('objects').find({ "_id": "5fwewr2332432432432423"}) выдает ошибку полагаю из-за вложености oid
Pavlo
Всем привет, подскажите пожалуйста, как лучше организовать хранение пользователей которые лайкнули коммент. Я думал сделать в модели комментария поле likes и там массив пользователей которые лайкнули, но если таких пользователей будет 200 или 500 будет ли это нормально? Может лучше сделать отдельную модель для лайков, и каждый лайк будет как отдельный объект в базе?
SuleYman
Привет, зачем нужен монго если есть в Postgres тип json и bson?)
Kenan
SuleYman
Зачем нужен Postgres, если есть монга 🧐
Ну монго больше ничего не умеет делать, а у постгрес это одна из возможность подкопотом
Alexandr
Ну монго больше ничего не умеет делать, а у постгрес это одна из возможность подкопотом
Ну так постгре и начал шевелиться из-за конкуренции с nosql, с монгой в частности, если бы не было монги, с большой вероятностью json в постгресе тоже небыло бы
yopp
Привет, зачем нужен монго если есть в Postgres тип json и bson?)
Табличные и документные хранилища имеют разную архитектуру. У pg и у монги совершено разные движки для хранения, у пг заточенные под табличные данные, у монги под bson blobs. Второй момент, в монге все фичи доступны из коробки, в постгресе из ещё нужно найти и завести. Третий момент, это прозрачное для клиента шардирование. Ну и в целом шардирование в монге очень неплохо развито и поддерживает много разных фич, типа зон
yopp
Балансировщик бы ещё нормальный
Dezmunt
Вопрос. Mongoose. Использую метод find, потом пробегаюсь по полученному массиву найденых объектов и хочу добавить свойство, но оно не добавляется. Почему? Вроде объект не заморожен и все норм
Dezmunt
Ошибок нет, пробовал и через точку, и через квадратные скобки, и через defineProperty
Anton
Ребзя есть массив _id Как сделать по нему find так чтобы получить все доки по этому массиву
Anton
$in
точняк, опять бошка не варит
Kenan
db.collection.find({ _id: { $in: idArray } })
Kenan
если не ошибаюсь
Dezmunt
categories  это полученный массив от метода find
Kenan
find возвращает курсор, а не объект. Тебе нужно данный курсор перевести в массив и потом уже плясать от него
Alexandr
Смапь этот массив сначало, должно сработать
Kenan
а судя по тому, что я вижу - у тебя монгус, ты можешь просто .exec добавить и будет норм
Kenan
и, как мне кажется, ты тут можешь избавиться от цикла
Josh
в цикле for нельзя await
Kenan
с помощью варианта, который я выше скинул (хотя сути не поменяет)
Dezmunt
в цикле for нельзя await
наверное это, спс
Josh
Почему?
for await (variable of iterable) { statement }
Josh
потому что for синхронный цикл
Alexandr
for await (variable of iterable) { statement }
Могут быть какие-то скрытые баги? Я засовывал авейт в фор и все работало хорошо
Josh
если уж нужны отдельные запросы аля батч то как-нибудь Promise.all(Array.from({ length: categories.length }).map(i => BM.find({ type: cat[i] })))
Josh
таков путьсинтаксис
Alexandr
не будет просто напросто отрабатывать
Так работает, на 8 ноде точно
Josh
проверь еще разик
Josh
https://habr.com/ru/post/435084/
Josh
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of
Josh
надо сворачивать спич о жс, пожопке получим
Alexandr
Та уже 2 года как крутится на проде авейт в форе, я потом позже узнал что так вроде как нельзя) но оно работает 🤷‍♂️
Alexandr
Я еще тестировал с сеттаймаут, обернул в промис и в форе авайт ставил, а ниже консоль.лог, проверял действительно ли оно будет дожидаться окончания авейта прежде чем приступить к следующей итерации, и таки да, оно ждало
Alexandr
Ну если для паралельной мне привычней использовать Promise.all или Promise.allSettled
Anton
он считай единомоментно запустит функционал который ты хочешь
El Pinguino
привет коллеги! подскажите пожалуйста как лучше сделать схему бд: у меня добавляются списки аккаунтов (строка uint256) и небольшая доп инфа к каждому аккаунту, каждый список до 100к строк. Мне нужно отвечать на запросы 1) в каких списках содержится этот акканут, и 2) дать допинфу по аккаунту из списка;
El Pinguino
привет коллеги! подскажите пожалуйста как лучше сделать схему бд: у меня добавляются списки аккаунтов (строка uint256) и небольшая доп инфа к каждому аккаунту, каждый список до 100к строк. Мне нужно отвечать на запросы 1) в каких списках содержится этот акканут, и 2) дать допинфу по аккаунту из списка;
я думаю создавать на каждый списко новую collection, и после добовления коллерции - проходиться циклом по каждому аккаунту и добавлять его в в специальную коллекцию account->collection_names, но кажется это как-то неоптимально
Null
4.4.2 (Nov 18) ◦ 4.2.11 (Nov 18) ◦ 4.0.21 (Nov 10) • Решение проблем с MongoDB по подписке • Документация • Официальные курсы (Бесплатно) Stable: 4.4.2 (Nov 18) ◦ Bugfix: 4.2.11 (Nov 18) Legacy: 4.0.21 (Nov 10, ☠️Jan ’22) ◦ 3.6.21 (Nov 16, ☠️Apr ’21) По вопросам платной поддержки и покупки лицензий пишите @dd_bb ☠️ 3.4.23 (Jan ‘20), 3.2.21 (Dec ’18), 3.0.15 (May ’17)
Artem
Подскажите, почему не работает проекция с id: true? У этих документов есть id, как переписать, чтоб id тоже отображался в результатах? Если убираю id: true — все работает, но в документах тогда не отображается id В общем задача стоит в том, что надо выбрать всех Users, у которых в массиве tenders есть элемент с _id равным userTender._id, при этом вернуть надо только этот элемент и id.
Artem
по _id я фильтрую tenders
Daniil
Поле id в mongoose это виртуальное поле, которое является строковым представлением _id, которое в свою очередь является ObjectId