Nikita
Критерий Проверки это подключение в бд через какой нибудь компас
Константин
environment:
- MONGO_INITDB_ROOT_USERNAME=rootuser
- MONGO_INITDB_ROOT_PASSWORD=rootpass
Константин
Константин
MONGO_INITDB_ROOT_DATABASE=admin
Есть такая ссылка с неким описанием параметров https://github.com/docker-library/mongo/issues/329
Более ничего интересно пока не нашел
Anton
Добрейшего времени суток!
Подскажите, плиз, если сможете.
Есть коллекция с полем order, у которого, конечно же, есть индекс уникальности.
И есть потребность менять этот порядок сразу у нескольких записей, сохраняя при этом неповторяемость величины order.
Пробовал через операцию bulk_write - но получаю по шапке ошибкой "duplicate key error collection" - Индекс бдит!
Очень не хочется городить огород с удалением-вставкой и прочей синтетикой, неужели нельзя как-то сразу поменять несколько записей не провоцируя проверку индекса?
Nick
Nick
Nick
и сдвиги на каких диапазонах происходят и как часто
Anton
Документов немного, да.
Вряд ли более 10-15.
Можно всё на уровне приложения сделать.
Anton
Но если есть нативный индекс уникальности, если можно всё и сразу (или нельзя) - то why not?
Anton
Anton
И как мне осуществлять смену порядка документов?
Nick
если документов немного, то заводите документ с массивом в котором держите идентификаторы документов, позиция в массиве - это ваш порядок
Nick
и атомарно его обновляйте при изменеии порядка
Anton
Nick
да
Viktar
Тогда индекс уникальный не надо. А человеку это важно
Viktar
Я не вижу проблем организовать все это на текущей коллекции. Просто отключив индекс уникальности
Anton
А как проверять уникальность, как валидировать запросы с фронта?
Anton
да, я знаю как можно проверить уникальность самостоятельно, но мне кажется что это "колхоз", а тут всё же есть индекс.
Viktar
А как вы определяете порядок?
Anton
Viktar
Я не про это, а как вы решаете у какого документа 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
Индекс уникальности служит для того, что бы не было дубликатов. А вы как я понимаю хотите делать дубликаты.
Anton
Viktar
Ваш подход подразумевает в таком случае использовать в таком случае промежуточное значение
Andrey
Делаю aggregate.$lookup как мне сделать выборку по as, что она пустая ?
Nick
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 - не используется
Nick
Ufo
Привет! Прошу извинить Сообщество за вопрос от неофита, но... как можно создать пользователя? Делаю db.createUser(
{
user: “User”,
pwd: “PassworD”,
roles: [ { role: “readWrite”, db: “User” }
}
) Но он не создаётся (судя по show users), хотя ошибки нет... пытаюсь понять где не прав я...
Vadim
Ufo
Ждал, что ошибка будет при парсинге... Спасибо! Низкий поклон Вам!! (с)
Nick
Nick
и если указаны два, то тот что горячее (в кеше) и опять же селективнее, а то вы можете же сделать индексы a-b и b-a-c и какой из них будет выбран зависит от того что быстрее сузит область поиска
Andrey
Nick
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
Ну не понятно что за запрос
Viktar
Добрый день, есть запрос
db.personCatalog.find({simpleFirstName:"daniel", simpleLastName:"garvey", isDisabled:null, nationwideOrder:{$gt:0, $lte:20}}).limit(20)
но он почему то игнорирует индекс
{
"v" : 2,
"key" : {
"simpleFirstName" : 1,
"simpleLastName" : 1,
"nationwideOrder" : 1,
"isDisabled" : 1
},
"name" : "simpleFirstName_1_simpleLastName_1_nationwideOrder_1_isDisabled_1",
"background" : true
}
использует индекс
{
"v" : 2,
"key" : {
"simpleFirstName" : 1,
"simpleLastName" : 1,
"state" : 1,
"stateOrder" : 1
},
"name" : "simpleFirstName_1_simpleLastName_1_state_1_stateOrder_1",
"background" : true
},
Вот запрос, который не использует индекс который под него создан
Nick
Добрый день, есть запрос
db.personCatalog.find({simpleFirstName:"daniel", simpleLastName:"garvey", isDisabled:null, nationwideOrder:{$gt:0, $lte:20}}).limit(20)
но он почему то игнорирует индекс
{
"v" : 2,
"key" : {
"simpleFirstName" : 1,
"simpleLastName" : 1,
"nationwideOrder" : 1,
"isDisabled" : 1
},
"name" : "simpleFirstName_1_simpleLastName_1_nationwideOrder_1_isDisabled_1",
"background" : true
}
использует индекс
{
"v" : 2,
"key" : {
"simpleFirstName" : 1,
"simpleLastName" : 1,
"state" : 1,
"stateOrder" : 1
},
"name" : "simpleFirstName_1_simpleLastName_1_state_1_stateOrder_1",
"background" : true
},
поля по которым делается выборка диапазоном должны идти в конце чтобы опять же селективность дала пользу а не доп выборки по IO. В вашем случае надо сделать индекс
"simpleFirstName" : 1,
"simpleLastName" : 1,
"isDisabled" : 1
"nationwideOrder" : 1,
Viktar
Nick
Nick
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
{
'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 стоит
Посмотрите какой план запроса и его выполнение добавив explain({executionStats:1}) перед .aggregate. Возможно что планировщик выбирает какой-то неудачный план
yopp
Но наверное более корректно сортировать по нужному атрибуту до вызова $lookup.
Отдельно отмечу что сортировка по _id зависит от того, на чьей стороне и как значение генерируется. Не все драйвера генерируют _id по спецификации и итоговый порядок может отличаться от ожидаемого
Nick
{
'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 стоит
сколько объектов в среднем подтягивается?
Артем
Артем
Артем