fenogentov
This command will return immediately even if the server is write-locked:
ага, если сервер существует, а если сервера нет, то почему без ошибки команда заканчивается
Black
ага, если сервер существует, а если сервера нет, то почему без ошибки команда заканчивается
Сервер вероятнее всего есть-если это атлас-то ты пытаешься подключиться к существующему атласу другого пользователя->тебе ping отправляет результат что да сервер есть->ты пытаешься что-то сделать и тебе выкидывает ошибку что у тебе нет ни прав,ни доступа
fenogentov
Ip есть в 2 форматах-ip4 и ip6
имена серверов задавалб ip4 задавал
Black
имена серверов задавалб ip4 задавал
Тогда варианта 2: 1)Либо в твоем коде ты переопределил/изменил метод ping и он теперь не работает 2)В самом драйвере он не работает-зайти на goland mongodb driver и открой issue
Nick
ага, если сервер существует, а если сервера нет, то почему без ошибки команда заканчивается
потому что в команде прямо написано - проверяет возможность подключиться, а не то что получится
fenogentov
Сделал через clientOptions := options.Client() clientOptions.SetHosts(...) clientOptions.SetAuth(...) заработало, пинг стал отваливаться "server selection timeout"
Oleg
Привет Как лучше всего обновить список определенных объектов коллекции и обновить каждому разное значение?
Oleg
Не используя перебор это реально сделать?
Oleg
bulkWrite это про это?
Black
bulkWrite это про это?
Не совсем понял что имеется ввиду?Если обновить значение полей в документах коллекции-без использования перебора-тогда нужно делать перед обновлением условие поиска только нужных нам документов в коллекции и потом уже в документах обновлять поле.Bulkwrite-это просто последовательность действий с базой,последовательность выполняется синхронно и шаги идут строго один за другим
Oleg
ну сейчас у меня вот так, если я сделаю bulkWrite и запихну туда 120к элементов это будет лучше или нет))
похоже bulkWrite создан не для этого)) я попробовал, база time out возвращает
Oleg
потому что пихать нужно по 10к за раз
ну я пихнул всего 255, возможно он регэкспы не поддерживает
Black
ну сейчас у меня вот так, если я сделаю bulkWrite и запихну туда 120к элементов это будет лучше или нет))
Конкретно здесь лучше сделать так:создать массив регулярок в js(const regexArray=addressWithCount.map(item)=>return new Regex(item,'i')).И затем использую findManyAndUpdate закинуть в условиях поиска нужные данные и сделать изменения
Назар
ну примерно. Зависит от размера апдейта. Будет гораздо лучше чем по 1, но в вашем случае поиск по регулярке может тормозить гораздо сильнее чем апдейт
Oleg
ну мне регулярка не нужна, можно просто чтобы регистр не учитывался
Oleg
Получилось?
пока думаю как лучше избежать регулярки
Oleg
хотя нет, ее не избежать думаю
Назар
https://www.mongodb.com/docs/manual/core/index-case-insensitive/
Black
Можно попробовать написать скрипт который создаст в базе новое поле с поиском.Что типа:walletAddressSearch куда засетить walletAddress в lowerCase и потом уже делать поиск по этому полю
Oleg
понял, спасибо то есть смысл есть чтобы использовать bulkWrite, это будет быстрее как я понял?
Nick
понял, спасибо то есть смысл есть чтобы использовать bulkWrite, это будет быстрее как я понял?
bulkWrite лишь упрощает формирвоание запроса. Скорость выполнения относительно просто выполнения единичных запросов быстрее не будет, а иногда даже и хуже будет изза очередности. Плюс создается проблема в отслеживании результата выполнения конкретного запроса, т.е. если есть необходимость проверять обновился ли док или услвоие криво написан ои ни одного дока не обновилось или обновилось больше одного, хотя ожидался только один
Oleg
я пробовал делать так)) но эт слишком круто
Nick
я пробовал делать так)) но эт слишком круто
кошельки небось криптошные в разном регистре, а чтото сделать надо по адресу с лоукейсе?
Black
я пробовал делать так)) но эт слишком круто
Оно и не будет работать.Есть метод findManyAndUpdate.Либо создаешь индекс с нечуствительностью к регистру либо новое поле по которому будет идти поиск(что-то типа walletAddressSearch)
Nick
дэ
https://web3js.readthedocs.io/en/v1.2.0/web3-utils.html#tochecksumaddress - переведет в миксед-кейз и можно будет простым сравнением без регулярок
Nick
понял, спасибо, попробую
либо просто апдейт по всей базе с добавлением нового поля, в которое lowcase записать из существующего адреса и потом уже опять же простым сравнением
Nick
регулярки сильно тормозят получается?
по сравнению с простыв сравнение - намного медленнее. Плюс индексами влоб не покрывается, надо явно создавать как выше предложили регистронезависимый. Но и тут надо явно указать ключ начала строки в начале ^123123132 чтобы сработал поиск по префиксу
Oleg
понял, буду исправлять, спасибо
Elvee
Всем привет! Подскажите момент. У меня есть коллекция 181м записей. Как мне организовать быстрый поиск по нескольким полям? С одним полем понятно. Я создал текстовый индекс и всё хорошо. А как быть с несколькими? Ниже прикрепил фото как я ищу по одному полю
Elvee
Оператор $or
да я смотрел. Но or это ИЛИ а мне нужно И
Алексей
а остальные поля какие, как там ищешь (совпадение, > <)? возможно эффективнее будет отсеять сначала по ним, чтобы сузить выборку а только потом текст серч
Elvee
получается что у меня 4 поля. Если человек ввёл одно. То поиск по одному полю
Алексей
из них 1 текстовое и остальные 3 полное совпадение?
Алексей
я имею в виду только по 1 может быть неполное совпадение? остальные клиент должен ввести точно?
Алексей
по ним тоже нужны индексы, причем компаунд не сделать так как у тебя поиск может быть по любому одному из них
Алексей
из интереса -сколько занимает текстовый индекс для такой большой БД?
Elvee
Алексей
ок, жду, не забудь
Алексей
у меня сейчас компаунд на 4 поля
он не поможет, ты же сам сказал клиент может указать только один и любой, компаунд будет работать если он укажет первый или первый+второй или первый + второй +третий
Elvee
он не поможет, ты же сам сказал клиент может указать только один и любой, компаунд будет работать если он укажет первый или первый+второй или первый + второй +третий
Ага, понял. Хорошо. Спасибо. Как закину все доки скажу что по размеру) Тогда попробую указать 4 текстовых индекса для каждого поля отдельно. Но как их потом писать в запросе?
Алексей
{name: user_input, country: user_input2, finalochka: {text: {search: user_input3}}} или что тебя смущает?
Алексей
и не 4 текстовых, ты ж сказал первые 3 поля надо полное совпадение а не поиск слов, там просто индекс
Алексей
причем я не спешил бы создавать 4 индекса не посмотрев размеры банкета)
Алексей
цифры в студию!
Elvee
цифры в студию!
это только половина записей
Elvee
Теперь буду играться с индексами)
Алексей
а чего индекс 1? это по _ид? или это твой текстовый?
Elvee
а чего индекс 1? это по _ид? или это твой текстовый?
Это ид. текстовый ещё не создавал
Алексей
ну я думал поболе будет)) но окэй. а теперь задай себе вопрос надо ли тебе это и не хватит ли 3 полей с совпадением?))
Elvee
ну я думал поболе будет)) но окэй. а теперь задай себе вопрос надо ли тебе это и не хватит ли 3 полей с совпадением?))
да вот как раз пробую искать по индексу. Уже минуты 2 ищет... судя по всем не очень то он и помог)
Алексей
смотря что за запрос, недаюсь ты не кучу полей туда прописал и посмотри експлейн, компас показывает эффективность и использован ли индекс
Алексей
запрос покажи, видешь ведь что без индекса
Elvee
запрос покажи, видешь ведь что без индекса
сорян. Туплю) вот поиск по индексу)
Алексей
погоди, если у тебя поле индексировано то почему там ОР в запросе? как выглядит запрос?
Алексей
погоди, так тут нужен ли текстовые поиск? разве тебе не 1 конкретный человек нужен?
Elvee
погоди, так тут нужен ли текстовые поиск? разве тебе не 1 конкретный человек нужен?
запрос может быть как "Саша", так и "Саша Иванов")