Nick
Ребята подскажите как сделать так, чтобы при query запросе, где я делаю поиск по названию title, мне выдавало результат, даже если я не полностью написал название, а например только первые 3 буквы, грубо говоря функционал startsWith, только в монго
по описанию вам нужны регулярки https://www.mongodb.com/docs/manual/reference/operator/query/regex/ Если захочется больше функционала по работе с текстом, то можете посмотреть на $text запросы, но это не совсем полнотекстовый поиск и много ожидать не стоит
Nick
мне кажется это не то что мне нужно, в паттер regex нужно же вручную вписывать получается startsWith
да, собирать регулярку придется перед отправкой запроса в монгу
Дима
есть еще какие-то варианты?
Nick
с поиском по части слова встроенного больше ничего нет
Nick
можно попробовать конечно $text если всетаки поиск целыми словами будет https://www.mongodb.com/docs/manual/reference/operator/query/text/
Дима
у меня просто есть референс один
Дима
где осуществлён такой поиск, который мне нужен
Дима
вот взгляните
Дима
https://github.com/merunus/jobster-react-redux-app
Дима
вот как выглядит контроллер получения всех работ в данном случае
Дима
Дима
сам механизм вот этого фильтра осуществлён через добавление query в ссылку запроса
Дима
я пытаюсь сделать так же и почему-то не работает
Nick
но тут даже близко нет поиска по подстроке
Дима
ну как
Дима
если написать Civi
Дима
выдаст работы с названием Civil Engineer
Дима
мне это и нужно
Дима
Nick
скорее всего из базы тянется полный список и фильтрация уже происходит на фронте. Проверьте по вызову апи ну и All намекает что вытянется все
Дима
вот с этого запроса
Nick
вот с этого запроса
значит вам нужно организовать работу того что передается в поле search. И по аналогии как здесь поиску подстроки сразу среди типа и статуса и возможно названия. Жаль нет апи, но если там монго, то возможно там используются возможности atlas search, где есть полнотестовый поиск. Но в обычно монге за таким апи должен скрываться поиск по нескольким полям регулярками
Дима
а про atlast search не слышал
Дима
я в отчаянии, попробую реализовать обычную фильтрацию на фронте :(
Rus
Приветствую всех! Ребят я только начинаю учить mongoDB) подскажите пожалуйста, можно ли в базу данных с помощью метода create или другого метода, добавлять объекты в начало массива, а не в конец?
Eva🇺🇦
Mongoose Version Error and no matching document found for id Пользуюсь .save() (mongoose). Обновляю поле, которое является массивом строк. Это связано с тем, что mongoose не может отследить изминения в массиве?
Nick
Mongoose Version Error and no matching document found for id Пользуюсь .save() (mongoose). Обновляю поле, которое является массивом строк. Это связано с тем, что mongoose не может отследить изминения в массиве?
такая проблема возникает, когда документ изменился в другом месте, по делалось изменение. Т.е. выбирает документ через find с версией 1. Меняете содержимое и дергаете save - монгуз в это время проверяет что версия осталась та же и никто другой (другой поток, другое приложение, миграции и т.п.) ее параллельно не успел поменять. Так что ищите кто и где мог поменять ваш документ параллельно, либо делайте find-change-save в одной транзакции
Дима
Ребята а как можно сделать так, чтобы создании поста, в объект добавлялся его создатель
Дима
не просто его id,а полностью объект со схемой User
Дима
что требуется?
механизм динамического поиска через query
Alexandrr
механизм динамического поиска через query
поиска текста или каких-то параметров?
Дима
можете пролистать чуть выше я там все детально объяснил, или вот просто ссылка на проект, где осуществлён такой поиск
Дима
https://github.com/merunus/jobster-react-redux-app
Дима
https://github.com/merunus/jobster-react-redux-app
если нужно могу кинуть бек часть к нему
idk
Ребята а как можно сделать так, чтобы создании поста, в объект добавлялся его создатель
обычно делают референс, но в твоем случае понадобиться сначала сделать поиск пользователя, а потом вставь документ в схему P.S сделать референс лучше
Дима
из этого объяснения ничего не понятно
что именно не понятно? смотрите, у меня есть url запрос на сервер монго, в которую я хочу передавать query title=..., после отправки я хочу чтоб мне приходил массив объектов, где свойство title начинается с переданных мною букв в query, например я делаю запрос ....?title=Spa и хочу чтоб мне пришло два объекта, где у одного title = Spanish, а второго title = Spartak
Дима
я при запросе вытаскивал все queries в объект, но в таком случае
Дима
если я например напишу title=Spa
Дима
у меня придёт пустой массив
Дима
и только если полностью написать Spanish, будет результат с одним объектом, где title именно Spanish
Alexandrr
у меня уже был такой вариант
какой фрэймворк используется на бэке?
Дима
какой фрэймворк используется на бэке?
мой бек состоит из node express mongo
idk
пробовал?
Alexandrr
и только если полностью написать Spanish, будет результат с одним объектом, где title именно Spanish
https://stackoverflow.com/questions/8390018/passing-node-js-parameter-into-mongodb-request https://developer.mozilla.org/ru/docs/Learn/Server-side/Express_Nodejs/mongoose https://www.google.com/search?q=node+express+mongo+get+args+in+request&oq=node+express+mongo+get+args+in+requests
Дима
пробовал?
нет, сейчас изучу
Дима
который не динамический, а находит только точное совпадение
Alexandrr
здесь в основном про метод Schema.find()
1. делаем текстовый индекс 2. идем искать с полнотекстовым поиском 3. готово
Alexandrr
сейчас ознакомлюсь с text index
https://www.mongodb.com/docs/manual/core/link-text-indexes/ сам недавно ознакамливался и писал полнотекстовый поиск
Alexandrr
для этого всего нужен mongo realm или я уже не туда завернул?
всё необходимое по ссылке, что скинул выше, единственное, там операторы нормально не описаны
Phil
сейчас ознакомлюсь с text index
text index это не то, я бы предложил использовать регулярки. вот рабочий запрос на mongosh db.users.findOne({ username: { $regex: "^Spa", $options: "i" } })
Phil
ищет по префиксу как и надо
Дима
Дима
в результате приходит просто массив со всеми модулями
Alexandrr
ищет по префиксу как и надо
много минусов у регулярок
Phil
много минусов у регулярок
да много, например этот запрос будет работать за Fullscan
Alexandrr
да много, например этот запрос будет работать за Fullscan
ещё будет влиять последовательность слов в поисковой фразе не будет релевантности поиска и т.д.
Phil
ещё будет влиять последовательность слов в поисковой фразе не будет релевантности поиска и т.д.
да но тут и не требуется, как я понял где свойство title начинается с переданных мною букв в query, например я делаю запрос ....?title=Spa и хочу чтоб мне пришло два объекта, где у одного title = Spanish, а второго title = Spartak
Alexandrr
да но тут и не требуется, как я понял где свойство title начинается с переданных мною букв в query, например я делаю запрос ....?title=Spa и хочу чтоб мне пришло два объекта, где у одного title = Spanish, а второго title = Spartak
но полнотекстовый поиск работает быстрее, потому что индексирование text-index имеет другую механику. если сравнить время выполнения одного и того же запроса: 1. по текстовому индексу среди текстовых полей полнотекстовым поиском 2. по текстовому индексу с помощью регулярок 3. по обычному индексу с помощью регулярок 4. без индекса с помощью регулярок самым быстрым будет 1, потом 3, потом 2 и потом 4
Дима
что я упускаю? почему search не работает?
Phil
title: { $search: “Spanish” }
Дима
title: { $search: “Spanish” }
на сколько я понял, сначала нужно указать имя индекса через $, а потом обьект с поиском
Alexandrr
согласен
если точнее, у меня была разница в пределах 25-35% времени выполнения между пунктами, что описал выше, при свободном 100% времени простоя машины без нагрузки, судя из моих тестов. коллекция была заполнена на 1.7 млн записей (документов) интересно, как данные хранятся при текстовом индексировании и обычном индексировании, не находил ответа на этот вопрос? (к wiredtiger кажется это относится?)
Дима
Александр можете меня поправить?