Nico
да, начинаю понимать, потыкался там
Nico
да, именно так и получилось. Спасибо
Андрей
Добрый всем! Может кто подскажет группу для ребят с экспертизой в нереляционных для найма специалистов? Или можно писать тут (в правилах не увидел разногласий, но решил уточнить)? Заранее всем спасибо и хороших выходных!
Sova
Всем привет. Поделитесь опытом, нужен SaaS для бекапа MongoDB в Azure Blob Storage ( Mongo Cloud/Manager/etc. не подходит, нужно бекапы лить напрямую в Storage Account ). Любые отзывы ( успех/не успех ) крайне приветствуются.
Andrew
Привет всем! Подскажите, есть ли возможность поиска в Mongo Compass после замены регуляркой значения поля? То есть, мне требуется искать по номеру телефона в поле, в котором номер телефона может быть записан как через тире, так и через пробелы, со скобаками и без, и просто в виде числа без других символов. Идея такая: удалить всё, что не является цифрами и после этого сравнить с искомой строкой. Что-то типа { {field.replace("[^0-9]+", "")} : {$regex : "12345678910"} }
Andrew
что такое "замена регуляркой" и как ты себе это представляешь? в твоей записи ты просто из строки удаляешь кусок строки
Например, есть телефонные номера в поле: 1 234 567 89 10 +12345678910 +1 (234) 567-89-10 И я осуществляю поиск по 12345678910 Как сделать так, чтобы поиск возвратил все эти три документа. В примере в предыдущем сообщении я удаляю все нецифровые символы, и после сравниваю с набором цифр. Но это не является верным синтаксисом.
Andrew
лучше перед записью привести все в 1 формат и не иметь проблем)
Здесь согласен на 100%. Но именно сейчас такая ситуация)
Vladyslav
Здесь согласен на 100%. Но именно сейчас такая ситуация)
так напишите скрипт и привидите все в 1 формат
Andrew
Позже так и сделаем: приведём к одному формату и на загрузку поставим конвертер в единый формат. Но сейчас база именно такая, и требуется достать данные из имеющегося формата. И, я начал искать решение, интересно стало: в принципе, решаема ли это задача.
Alexandrr
Например, есть телефонные номера в поле: 1 234 567 89 10 +12345678910 +1 (234) 567-89-10 И я осуществляю поиск по 12345678910 Как сделать так, чтобы поиск возвратил все эти три документа. В примере в предыдущем сообщении я удаляю все нецифровые символы, и после сравниваю с набором цифр. Но это не является верным синтаксисом.
а что тут сложного? тип данных номеров - строка. значит нужно правильно составить регулярное выражение и не более того к тому же в интернете полно паттернов для этого, которые гуглятся с одного запроса
Alexandrr
Паттерн есть: /[^0-9]/ Вопрос: как применить его к полю и уже после этого сравнить с искомым значением.
ну тут видимо, остаётся только полагаться на правильность регулярки, так как в результат не может попасть что-то, что не подходит под выражение если это не вариант, то только проводить нормализацию данных, как ребята описали выше и потом уже искать и приводить сравнение
Upside
В любом случае будет перебор всей базы, так почему же сразу все не привести в порядок?
Andrew
а почему позже? вариант привести все в 1 вид - займет намного меньше времени, чем писать костыль, а потом его сносить
Здесь такая история: приложение пишет другой программист, я являюсь пользователем этого решения. Когда он поправит — неизвестно.
Andrew
И второй момент: я хочу понять возможно ли это
Upside
возможно
Andrew
другой программист доступ и дал)
Alexandrr
И второй момент: я хочу понять возможно ли это
в чистом виде - нет потому что исходные данные будут иметь все равно "грязный" вид, а сравниваться будут с "чистыми" данными, если мы говорим чисто про сравнение, как отдельную операцию
Alexandrr
И проще сразу обработать каждый элемент
обработать? что это значит?
Vladyslav
другой программист доступ и дал)
ну так вот вам вариант с обратной совместимостью: читаете всю бд, где есть поле номера, добавляете новое поле phoneFormatted - куда и пишете формализированую версию. Дальше для вашего поиска юзаете это поле. Еще нужно будет допистаь код на create\update, если таков есть
Upside
обработать? что это значит?
Привести к значению паттерна /[^0-9]/
Alexandrr
Привести к значению паттерна /[^0-9]/
привести != изменить он же явно написал - данные изменять не могу
Andrew
в чистом виде - нет потому что исходные данные будут иметь все равно "грязный" вид, а сравниваться будут с "чистыми" данными, если мы говорим чисто про сравнение, как отдельную операцию
Вот я об этом и думаю, что, например, если так: {field_name : {$regex : "text"}} То здесь понятно: мы сравниваем поле с соответствием его регулярке, ищем text. Исходное поле никак не преобразуется. А в случае, который мне требуется, там требуется исходное поле преобразовать регуляркой и сравнить с готовой строкой.
Alexandrr
только полагаться на то, что регулярка составлена без ошибок, т.е. не проводить сравнения после поиска по ней
Andrew
Ок. Парни, спасибо. Если получится этот кейс — напишу здесь)
Upside
Мне вот это очень помогло https://metanit.com/nosql/mongodb/2.3.php
.
Ребята привет, Mongo насколько знаю является не реляционной, тобиш связи по идее не должны быть Но будет ок если они будут? Например у меня в одной схеме есть uuid привязанные к другим схемам Например схема А {_id: 'qwerty', name: '...'} Schema B {_id: 'uiop', a_id: 'qwerty' } Безопасно ли это, практично ли, применяют ли вообще такое ? Спасибо
Dmitry
Например у актеров много фильмов, а у фильма много актеров. Делаешь через 3 коллекции и на этом всё
Dmitry
Вообще можно всё в одно коллекцию впихнуть, но через 3 удобней
Dmitry
Тем более есть lookup
.
Супер, спасибо Тогда применю) Просто в практике не встречался с реляциями в монге, чутка сомневался Принял, спасибо большое
😳
Всем привет, почему обычный find запрос выполняется 1 секунду?
😳
там всего 4 документа
Roman Khonichev
как измеряете время выполнения?
😳
база локальная?
на сервере, но все остальные запросы за 8-10 мс
😳
и в постмане еще видно
Roman Khonichev
а explain запроса что говорит?
😳
в плане?
Roman Khonichev
https://www.mongodb.com/docs/manual/reference/command/explain/
Roman Khonichev
вам бы в консольку на сервере, исключить задержку сети, фреймворков и т.д. Слишком много неизвестных
😳
хм, интересно, но просто странно что такой маленький запрос, так много времени занимает
Roman Khonichev
может запрос один, а он через орм тянет еще что-то... сделайте чистый запрос, все встанет на места
Roman Khonichev
explain должен все прояснить
Kek
Всем привет! Я только изучаю базы данных, пока не совсем могу понять как провфильно хранить сущности. У меня есть пользователь, у кого-то должен быть массив условных товаров. Я должен это хранить все в одной таблице? Для меня выглядит проще сделать две таблицы, с пользователями и товарами, и в товаре хранить ид владельца, тогда можно будет удобно получать данные когда я буду тянуть пользователя. (Товары должны быть у пользователя в поле товары) это удобно будет реализовать через агрегации и в дальнейшем удобно будет редактировать товар, и не трогать самого юзера Я правильно мыслю?
Kek
есть какойто не костыльный способ вернуть из агрегации один элемент?
Kek
для меня немного странно что нельзя сделать агрегацию после findOne)
Viktar
для меня немного странно что нельзя сделать агрегацию после findOne)
Если честно я не понимаю, какая у вас проблема
Kek
Если честно я не понимаю, какая у вас проблема
возможно нужно уточнить что я пишу это все на несте через библиотеку монгус как я понимаю после агрегации результат будет массивом, а мне нужно просто объект получить, точно такой же как после findOne
Kek
мне приходится делать array[0] что на мой взгляд не очень красиво, хотелось бы чтото более нативное
Viktar
Поставьте последним степом $limit:1
Viktar
И будет у вас один элемент в курсоре
Kek
Поставьте последним степом $limit:1
видел такое, но там все равно массив, меня именно массив немного не устраивает
Viktar
Ну агрегация другое не вернёт.
Viktar
А почему вам не нравятся массивы?
Kek
просто здесь тот случай когда я точно знаю что будет один объект, и было бы просто удобнее с ним работать
Kek
я красиво через деструктуризацию получаю)
😳
А зачем sort для findOne?
мне нужно получить самый последний
EV
Здравствуйте. Я новый в монге. Подскажите, как сделать транзакцию из mongosh? Второй вопрос - insert many. Если один документ при вставке упадет ошибкой по причине duplicate key, что с остальными?
mrFix
Приветствую. Такой вопрос: оператор $in, сколько можно значений без просадки производительности? У меня ориентировочно 20-40
Emil22878
гайс есть такая схема, как передать связь юзера в ключ и чтобы значение было totalScore ?
Emil22878