Danil
Nick
все ответы вполне себе правильные в современных реалиях. А так ищи ответ в методичке чего там преподы назагадали
Дмитрий
Александр
Не знает ли кто, статьи на доступном для нуба языке, о том: что такое транзакции и как их юзать, при работе с монгой?
Александр
В документации толком не увидел или я слепой
Александр
Ну или там называется это как то по другому может
Nick
S
Привет, возникла интересная проблема. У меня есть обычная коллекция Tokens и timeseries коллекция Prices. Я хочу для каждого Token вывести самую последнюю цену.
Для этого использую
Tokens.lookup({
"from": "Prices",
"localField": "name",
"foreignField": "token",
"as": "result"})
. В таком случае монго не использует индекс, созданный на Prices { token: 1 }. Оно использует его только, если сделать token - metafield в Prices. Кто-нибудь слышал почему так? Нигде в документации про это не написано
Nick
S
MongoDB 7.0.12 Community
Nick
Nick
S
и хорошо бы сразу эксплайн на https://pastila.nl/
Я заметил этот случай в БД, где 20 документов в Tokens и 500к документов в Prices. А сейчас просто тестирую на коллекциях по 5 документов в каждой и вижу такой же результат
Вот explain в моем случае, когда token не metafield, но есть индекс { token: 1, timestamp: 1}: https://pastila.nl/?002ed79e/a3271781e7f9dfa592d07b76b060b6c4#NYWLT3HyS+eMLV/YfoxAkA==
А вот explain, если token это metafield и есть автоматический индекс { token: 1, timestamp: 1}: https://pastila.nl/?001e5d7d/3384c5e039f6ee0dce6df21052502905#qjURpWfpDRsNvwRlyVF6GA==
Nick
Nick
S
Nick
А блин, я перепутал ссылки )
Налейте данных как вы ожидаете при эксплуатации и так тестируйте. Использование индекса не всегда ускоряет запросы изза накладных расходов. А в случае микроколлекций колсканы по уже закешенным данным будут реально дешевле походов по индексами с доп чтениями памяти
Александр
Всем привет. Подскажите, как создать валидацию для коллекции, что при field1 = "active" поле field2 должно иметь какое-то значение и в целом существовать?
Vladyslav
Александр
NoSQL
Александр
Nick
Спасибо, попробую
не пробуйте, это часть бизнес логики и она должна быть в прикладе, а не в бд
Семен
А сколько бесплатных баз я могу создать с одного акка?
Сергей
Всем привет) Ребят кто то разворачивал у себя 7.0 версию монги? Что в этом релизе нового в сравнении с 4 версией?
Yaroslav
Сергей
Привет, очень много поменялось
А ротация логов решена? Сервис держит старые файлы логов после ротации. Удалить можно если сервис рестартануть. В 7 версии это как то решилось? Не знаете?
Yaroslav
Yaroslav
Можно в доке глянуть
Сергей
посмотрю)
Сергей
спс
Yaroslav
Там куча новых индексов, ttl коллекции появились, курсор стрим, транзакции
Сергей
Ну вот такое нашлось
Oleg
Добрый день, хочу посоветоваться.
Есть товар, атрибуты которого заполняются на разном языке, в зависимости от региона, цена и скидка.
Как лучше, хранить каждую вариацию товара как отдельный документ? Или несколько документов на каждую вариацию свой?
Речь о хранении в моего?
На что можно нарваться, если все хранить в одном документе во избежания публикации данных.
Например при обновлении, нужно будет синхронно обновлять каждый документ.
Сотрудник 236
{"name": {"en": "apple", "ru": "яблоко"}, "price": {"rur": "100", "usd": "1"}}
Oleg
Сотрудник 236
Есть настройки юзера по языку, валюте и прочему, после получения данных из базы фильтруй по нужным полям.
Alexander
Сотрудник 236
И отправляй на фронт уже отфильтрованные
Oleg
не понятно как лучше. в отдельном документе вариации или в одном.
Сотрудник 236
как ты эти карточки товара будешь связывать?
Сотрудник 236
Если у меня язык немецкий, а валюта доллары, то на каждую комбинацию сделаешь по карточке?
Сотрудник 236
Посмотри на aliexpress
Сотрудник 236
Я уже предложил вариант: поля объекта это именованные массивы, из которых на основе настроек пользователя выбирается нужное.
Oleg
Сотрудник 236
Можешь создать справочники распространённых значений и брать значения оттуда.
Сотрудник 236
Например в отдельной коллекции. Документы виде {type: "color", values: [{name: {"en": "red", "ru": "красный"}, "rgb": "#ff0000"}, {names: {"en": "white", "ru": "белый"}, "rgb": "#ffffff"}]}
Сотрудник 236
Эти справочники НУЖНО закэшировать. Это снизит нагрузку на БД и повысит скорость ответа
Сотрудник 236
Так же надо будет предусмотреть механизм обновления кэша.
Oleg
Сотрудник 236
{"name": {"en": "...", "ru": "..."}, "color": {"type": "color", "id": "123456"}}.
Сотрудник 236
ты можешь сделать более универсальную версию, где будет описан тип поля вроде {"type": "dict_value", "dict_name": "color", "value_id": "123456"} и {"type": "translations", values: {"en": "...", "ru": "..."}}
Сотрудник 236
Далее по 'type' ты выберешь нужный обработчик для получения конечного значения.
Сотрудник 236
Вплоть до того что будет назначаемый порядок полей, т.е. ещё будет "order" для выстраивания полей на форме.
Сотрудник 236
если у тебя трудности с этим, то при реализации будет совсем невозможно.
Oleg
не совсем увидел связь словаря с переводами и с документом - товар. Когда товар имеет несколько значений цветов. Цвета хранятся в словаря в другой колекции.
Сотрудник 236
Возьми уже готовый магазин
Oleg
Возьми уже готовый магазин
есть перевод в коллекции wordDict.
на разныз языках.
имеет id.
как этот id привязать к документу (товар) в качестве значения color: [1,2,3]?
Сотрудник 236
color: 1
Oleg
id -ник подставлять из коллекции Словарь?
может есть примеры куда подглянуть?
Сотрудник 236
Если у тебя с этим трудности - дальше будет ещё хуже.
Oleg
как вы считаете - хранить переводы категория в каждом товаре - норм?
Алексей
Артем
Oleg
Юлиан🦉
Создал на 2 строковых поля в документе уникальный индекс. В итоге больше одного документа в колекции одновременно не создаётся - ошибка(то есть по одному). одно поле задаётся руками, другое генерится
secrets.token_urlsafe(32)
в три попытки
Алексей
Кто знает, подскажите пожалуйста
Сделал 2 шарда, но бд и коллекция не хочет шардироватся. Пробовал и
sh.enableSharding("bunker")
и
sh.shardCollection("bunker.users", { _id: 1 })
но всё равно partitioned: false
И когда делаю апдейты в bulkWrite, загружен на 100% только 1 шард, второй простаивает
Nick
Алексей
Потому что я в первый раз этим занимаюсь)
Nick