Nikita
Критерий Проверки это подключение в бд через какой нибудь компас
Константин
environment: - MONGO_INITDB_ROOT_USERNAME=rootuser - MONGO_INITDB_ROOT_PASSWORD=rootpass
Константин
Nikita
environment: - MONGO_INITDB_ROOT_USERNAME=rootuser - MONGO_INITDB_ROOT_PASSWORD=rootpass
Эти две env variables я уже использую. Какие есть ещё? Я не нашёл полный список… мне нужна та которая отвечает за authSource?
Константин
MONGO_INITDB_ROOT_DATABASE=admin Есть такая ссылка с неким описанием параметров https://github.com/docker-library/mongo/issues/329 Более ничего интересно пока не нашел
Anton
Добрейшего времени суток! Подскажите, плиз, если сможете. Есть коллекция с полем order, у которого, конечно же, есть индекс уникальности. И есть потребность менять этот порядок сразу у нескольких записей, сохраняя при этом неповторяемость величины order. Пробовал через операцию bulk_write - но получаю по шапке ошибкой "duplicate key error collection" - Индекс бдит! Очень не хочется городить огород с удалением-вставкой и прочей синтетикой, неужели нельзя как-то сразу поменять несколько записей не провоцируя проверку индекса?
Anton
А зачем это поле нужно? какой бизнес смысл
Например, приоритет в очереди. Очередность хостов внешних сервисов, etc.
Nick
Например, приоритет в очереди. Очередность хостов внешних сервисов, etc.
тогда зачем менять? выбыл первый и ничего менять не нужно, порядок остальных остался
Anton
тогда зачем менять? выбыл первый и ничего менять не нужно, порядок остальных остался
Нет, не выбыл. Это не очередь, а очерёдность. Никто ниоткуда не выбывает. Просто какой-то документ надо "поднять повыше", смещая, разумеется, всех кто после него.
Nick
и сдвиги на каких диапазонах происходят и как часто
Anton
Документов немного, да. Вряд ли более 10-15. Можно всё на уровне приложения сделать.
Anton
Но если есть нативный индекс уникальности, если можно всё и сразу (или нельзя) - то why not?
Nick
Но если есть нативный индекс уникальности, если можно всё и сразу (или нельзя) - то why not?
у вас задача же не сделать уникальным какоето поле, а указать порядок документов - тут вам уникальный индекс не помощник.
Anton
И как мне осуществлять смену порядка документов?
Nick
если документов немного, то заводите документ с массивом в котором держите идентификаторы документов, позиция в массиве - это ваш порядок
Nick
и атомарно его обновляйте при изменеии порядка
Nick
да
Viktar
Тогда индекс уникальный не надо. А человеку это важно
Nick
Тогда индекс уникальный не надо. А человеку это важно
человеку важно организовать порядок, а не уникальность. Не путайте хотение применить чтото с реальными потребностями и докапывайтесь до того что реально требуется от функционала
Viktar
Я не вижу проблем организовать все это на текущей коллекции. Просто отключив индекс уникальности
Anton
А как проверять уникальность, как валидировать запросы с фронта?
Anton
да, я знаю как можно проверить уникальность самостоятельно, но мне кажется что это "колхоз", а тут всё же есть индекс.
Viktar
А как вы определяете порядок?
Viktar
Я не про это, а как вы решаете у какого документа 1, а у какого 5?
Anton
Я не про это, а как вы решаете у какого документа 1, а у какого 5?
Это же порядок, это приоритет, это может быть как скрытое от редактирования поле, так и явное.
Anton
Как это разрулить на уровне приложения я знаю. Мне бы хотелось знать, могу ли я всё это сделать средствами MongoDB.
Viktar
Я если честно не совсем понимаю, что вы хотите средствами монги сделать. Проверить уникальность? Индекс проверяет. И не даёт появлению дубликатов.
Viktar
Как сделать дубликат на поле с индексом уникальности? Ответ никак. Как проапдейтить такое поле - записать значение которого нет
Anton
Viktar
1. Записываете значения которых нет 2. Записываете нужные значения
Anton
например, есть такой набор: {"name": "Аркадий", "order": 1 } {"name": "Борис", "order": 2} {"name": "Вячеслав", "order": 3}
Anton
А я такой одним апдейтом делаю так: {"name": "Аркадий", "order": 1 } {"name": "Борис", "order": 3} {"name": "Вячеслав", "order": 2}
Viktar
Мое мнение вам там не нужен индекс уникальности
Anton
Да, видимо придётся городить колхоз на стороне сервера приложений.
Anton
раз уж в монге нет таких механизмов
Viktar
Индекс уникальности служит для того, что бы не было дубликатов. А вы как я понимаю хотите делать дубликаты.
Viktar
Ваш подход подразумевает в таком случае использовать в таком случае промежуточное значение
Andrey
Делаю aggregate.$lookup как мне сделать выборку по as, что она пустая ?
Andrey
Уже сделал )
Andrey
вопрос на общее понимание, если есть 2 индекса: index 1. Compound из 2 полей: a и b index 2. и индекс по 3 полю: с агрегация match при поиске по a и b match по полю c Используется только индекс 1? Вопрос в том, что искать по полю c на долгое время - не было нужды, тут вдруг захотели искать по 3 полям. Чтоб не перестраивать индекс 1 (да и по нему чаще будет поиск чем по 3 полям), добавили по полю c. В надежде что монга, найдет документы по a и b и в них с использованием индекса по c - быстро вернет. Но судя по explain - индекс по c - не используется
Ufo
Привет! Прошу извинить Сообщество за вопрос от неофита, но... как можно создать пользователя? Делаю db.createUser( { user: “User”, pwd: “PassworD”, roles: [ { role: “readWrite”, db: “User” } } ) Но он не создаётся (судя по show users), хотя ошибки нет... пытаюсь понять где не прав я...
Ufo
Ждал, что ошибка будет при парсинге... Спасибо! Низкий поклон Вам!! (с)
Andrey
скорее всего планировщик не видит смысла в использовании индекса 2, т.к. его селективность ниже уже использованного индекса 1, а делать кроссмерж выборку по двум индексам еще дороже по операциям и затратам на диски.
А как себя будет вести планировщик, при наличии индекса по 3 полям и по 2 полям. То есть индекс 1 оставляем, и строим идекс по полям a b c. Если нужно будет искать по тройке значений. Будет ли в одних случаях использваоться индекс 1 а в других индекс 2
Nick
и если указаны два, то тот что горячее (в кеше) и опять же селективнее, а то вы можете же сделать индексы a-b и b-a-c и какой из них будет выбран зависит от того что быстрее сузит область поиска
Andrey
Тогда вам за глаза одного индекса тройного
Дожидаюсь когда достроиться, чтоб сравнить скорость.
Viktar
Тогда вам за глаза одного индекса тройного
У меня почему то при запросе по полям которые есть в индексе используется индекс с меньшим количеством полей. Я так и не разобрался почему.
Andrey
У меня не во всех документах есть поле c, может это как повлиять, если оставить только один индекс по 3 полям
Nick
У меня почему то при запросе по полям которые есть в индексе используется индекс с меньшим количеством полей. Я так и не разобрался почему.
если есть выбор то будет использован тот который дешевле по размеру, чтобы минимизировать работу с диском
Andrey
Не помню, можно ли принудительно указать какой индекс использовать
Nick
Добрый день, подскажите, что это за странный Slow quert {"t":{"$date":"2022-09-14T04:36:21.976+00:00"},"s":"I", "c":"COMMAND", "id":51803, "ctx":"conn583","msg":"Slow query","attr":{"type":"command","ns":"catalog.$cmd","command":{"update":"addressCatalog","ordered":true,"lsid":{"id":{"$uuid":"84d565df-84f8-400e-adf9-fdbfe3c52457"}},"$clusterTime":{"clusterTime":{"$timestamp":{"t":1663130159,"i":1}},"signature":{"hash":{"$binary":{"base64":"jZFEXMui1QHBAc8MqXF1ProF8Ik=","subType":"0"}},"keyId":7138406697319530499}},"$db":"catalog"},"numYields":580,"reslen":245,"locks":{"ParallelBatchWriterMode":{"acquireCount":{"r":581}},"ReplicationStateTransition":{"acquireCount":{"w":582}},"Global":{"acquireCount":{"r":1,"w":581}},"Database":{"acquireCount":{"w":581}},"Collection":{"acquireCount":{"w":581}},"Mutex":{"acquireCount":{"r":1}}},"flowControl":{"acquireCount":581,"timeAcquiringMicros":1134},"storage":{},"protocol":"op_msg","durationMillis":7333}}
а что в нем странного?
Viktar
Не тот кейс указал. Этот Я не понял, что за он
Viktar
Ну не понятно что за запрос
Nick
Viktar
последовательность полей в запросе никакого значения не имеет
Тогда не совсем понял про селективность. IsDisabled самая низкая. Есть только у 1% записей
Nick
Тогда не совсем понял про селективность. IsDisabled самая низкая. Есть только у 1% записей
поэтому стоит перед полем по которому идет запрос диапазоном
Viktar
Viktar
А по странному слоу квери может есть какие нибудь мысли?
Артем
{ 'from': 'message_v2', 'as': 'message', 'let': { 'chat_room_id': '$chat_room._id' }, 'pipeline': [{ '$match': { '$expr': { '$eq': ['$$chat_room_id', '$chat_room'] } } }, { '$sort': { '_id': 1 } }] } гайз, как работает сорт в данном случае? я правильно понял что он отсортирует мне НАЙДЕННЫЕ (прилукапенные) значения? если да, то почему этот запрос выполняется в разы дольше чем этот? { 'from': 'message_v2', 'as': 'message', 'let': { 'chat_room_id': '$chat_room._id' }, 'pipeline': [{ '$match': { '$expr': { '$eq': ['$$chat_room_id', '$chat_room'] } } }] } Индекс на chat_room стоит
yopp
Но наверное более корректно сортировать по нужному атрибуту до вызова $lookup. Отдельно отмечу что сортировка по _id зависит от того, на чьей стороне и как значение генерируется. Не все драйвера генерируют _id по спецификации и итоговый порядок может отличаться от ожидаемого
Nick
Ерунда, 5-6
и разница именно в разы?