✙ Nikita
👍
Anonymous
есть поле sections типа Object, mongoose при finByIdAndUpdate записывает только timetables, а я хочу чтоб записалось все, как это сделать?
Anonymous
если все подполя пустые объекты, то запишутся все, но тогда при findById он мне sections не возвращает вообще, с этим тож можно что нибудь сделать?
Anonymous
разобрался, нужен был minimize: false в схеме
Google
Всем привет можете помочь исправить ошибку Centos 7 x64 Mongodb 4.0 / 4.2 пробовал переустановить
Viktar
Viktar
Александр
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
В зависимости от того, какую проблему вы хотите решить шардированием будет понятно какая стратегия для вас является более оптимальной
yopp
yopp
Но в этом случае запросы по email будут широковещательными
Александр
yopp
Самый простой способ это выделить почтовые адреса в отдельную коллекцию
Александр
yopp
Попробую раздробить. Думаю ничего страшного.
Спасибо)
Перед этим стоит проверить насколько дорогие широковещательные запросы. Если вы используете полное совпадение, то скорее всего потеряете немного в latency и возможно появится дополнительный cache pressure, на хранение верхних уровней дерева
Artem
Как задать стартовый null в mongoose?
{
type: String,
required: true,
default: null
}
Ругается, что не передал, когда создаю с undefined
Anonymous
Artem
SuleYman
Приветствую, хочу понять зачем создается "_id": { "$oid": - такая сущность в документе? Хочу сделать
db.getCollection('objects').find({ "_id": "5fwewr2332432432432423"}) выдает ошибку полагаю из-за вложености oid
Pavlo
Всем привет, подскажите пожалуйста, как лучше организовать хранение пользователей которые лайкнули коммент. Я думал сделать в модели комментария поле likes и там массив пользователей которые лайкнули, но если таких пользователей будет 200 или 500 будет ли это нормально? Может лучше сделать отдельную модель для лайков, и каждый лайк будет как отдельный объект в базе?
yopp
SuleYman
Привет, зачем нужен монго если есть в Postgres тип json и bson?)
Kenan
Anton
yopp
Привет, зачем нужен монго если есть в Postgres тип json и bson?)
Табличные и документные хранилища имеют разную архитектуру. У pg и у монги совершено разные движки для хранения, у пг заточенные под табличные данные, у монги под bson blobs.
Второй момент, в монге все фичи доступны из коробки, в постгресе из ещё нужно найти и завести.
Третий момент, это прозрачное для клиента шардирование. Ну и в целом шардирование в монге очень неплохо развито и поддерживает много разных фич, типа зон
yopp
Балансировщик бы ещё нормальный
Dezmunt
Вопрос. Mongoose. Использую метод find, потом пробегаюсь по полученному массиву найденых объектов и хочу добавить свойство, но оно не добавляется. Почему? Вроде объект не заморожен и все норм
Kenan
Dezmunt
Ошибок нет, пробовал и через точку, и через квадратные скобки, и через defineProperty
Kenan
Anton
Ребзя есть массив _id
Как сделать по нему find так чтобы получить все доки по этому массиву
Kenan
Anton
$in
точняк, опять бошка не варит
Kenan
db.collection.find({
_id: {
$in: idArray
}
})
Kenan
если не ошибаюсь
Dezmunt
Dezmunt
categories  это полученный массив от метода find
Kenan
find возвращает курсор, а не объект. Тебе нужно данный курсор перевести в массив и потом уже плясать от него
Alexandr
Смапь этот массив сначало, должно сработать
Kenan
а судя по тому, что я вижу - у тебя монгус, ты можешь просто .exec добавить и будет норм
Kenan
и, как мне кажется, ты тут можешь избавиться от цикла
Josh
Kenan
с помощью варианта, который я выше скинул (хотя сути не поменяет)
Dezmunt
Alexandr
Josh
Почему?
for await (variable of iterable) {
statement
}
Josh
потому что for синхронный цикл
Josh
если уж нужны отдельные запросы аля батч то как-нибудь Promise.all(Array.from({ length: categories.length }).map(i => BM.find({ type: cat[i] })))
Josh
Josh
таков путьсинтаксис
Alexandr
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
Я еще тестировал с сеттаймаут, обернул в промис и в форе авайт ставил, а ниже консоль.лог, проверял действительно ли оно будет дожидаться окончания авейта прежде чем приступить к следующей итерации, и таки да, оно ждало
Josh
Alexandr
Alexandr
Ну если для паралельной мне привычней использовать Promise.all или Promise.allSettled
Anton
Anton
он считай единомоментно запустит функционал который ты хочешь
El Pinguino
привет коллеги! подскажите пожалуйста как лучше сделать схему бд: у меня добавляются списки аккаунтов (строка uint256) и небольшая доп инфа к каждому аккаунту, каждый список до 100к строк. Мне нужно отвечать на запросы 1) в каких списках содержится этот акканут, и 2) дать допинфу по аккаунту из списка;
El Pinguino
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)
yopp
Artem
Подскажите, почему не работает проекция с id: true? У этих документов есть id, как переписать, чтоб id тоже отображался в результатах? Если убираю id: true — все работает, но в документах тогда не отображается id
В общем задача стоит в том, что надо выбрать всех Users, у которых в массиве tenders есть элемент с _id равным userTender._id, при этом вернуть надо только этот элемент и id.
Daniil
Artem
Artem
по _id я фильтрую tenders
Daniil
Поле id в mongoose это виртуальное поле, которое является строковым представлением _id, которое в свою очередь является ObjectId