Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2022, 23:31
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Как при запросе к Mongo отфильтров. записи, а потом снова отфильтров. по др. парам.
На бэке юзается Node, Mongoose и Mongo. Подскажите как мне составить запрос таким образом, чтобы записи искались по БД сперва по одному параметру, а потом то что нашлось снова было отфильтровано по другому параметру?

Сейчас код выглядит так:
posts = await Post.find({
        $or:[
          {title: new RegExp(search, 'ig')},
          {text: new RegExp(search, 'ig')},
          {category: new RegExp(category, 'ig')}
        ]
      })

А мне нужно, чтобы записи нашлись по тому что прилетает в search, а потом были отфильтрованы по тому что прилетело в category. Заранее спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2022, 07:19
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Получаешь из posts массив (await posts.toAtrray(), кажется. Сам посмотри доки). А потом фильтруешь его обычным .filter
Ответить с цитированием
  #3 (permalink)  
Старый 01.04.2022, 07:32
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от CryNet
а потом то что нашлось снова было отфильтровано по другому параметру?
Монго может сразу не только фильтровать но и сортировать полученное.
Mongoose не используем...
Используем mongojs, но сути это наверняка не меняет.
db.test.find(query).sort({key1: 1, key2: -1})
Ответить с цитированием
  #4 (permalink)  
Старый 01.04.2022, 10:03
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от voraa Посмотреть сообщение
А потом фильтруешь его обычным .filter
А это не костыль?
Ответить с цитированием
  #5 (permalink)  
Старый 01.04.2022, 10:04
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от ksa Посмотреть сообщение
Монго может сразу не только фильтровать но и сортировать
Ага, то есть варик должен быть. Но сортировка мне не нужна, пока по крайней мере
Ответить с цитированием
  #6 (permalink)  
Старый 01.04.2022, 11:29
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от CryNet
Но сортировка мне не нужна, пока по крайней мере
Это я уже зарапортовался...

Теперь про фильтрацию - ее же можно сразу сделать как нужно, с учетом обоих значений.
Пока не понятно зачем брать больше, а потом это все еще раз фильтровать?
Ответить с цитированием
  #7 (permalink)  
Старый 01.04.2022, 12:19
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от ksa Посмотреть сообщение
Пока не понятно зачем брать больше, а потом это все еще раз фильтровать?
Та мне так-то и не нужно. Мне просто нужно статьи отфильтровать по категории и найти статьи, в которых содержится искомое слово.

Алогорим такой:
- нашли статьи по категории
- в эти найденных статьях нашли статьи, в которых содержится искомое слово

Если это будет 1 запрос -- это то, что мне нужно
Ответить с цитированием
  #8 (permalink)  
Старый 01.04.2022, 12:43
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от CryNet
Если это будет 1 запрос -- это то, что мне нужно
Такой?
{
	category: new RegExp(category, 'ig'),
	$or:[
		{title: new RegExp(search, 'ig')},
		{text: new RegExp(search, 'ig')},
	]
}

Т.е. ты расскажи чего хочешь искать в итоге?
Ответить с цитированием
  #9 (permalink)  
Старый 01.04.2022, 12:54
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от ksa Посмотреть сообщение
Такой?
Т.е. ты расскажи чего хочешь искать в итоге?
Такой.

Хочу в БД найти статьи, который содержат указанную категорию и истомый текст. В постмане это выглядит так:
https://ibb.co/qmxrh7H
Ответить с цитированием
  #10 (permalink)  
Старый 01.04.2022, 13:40
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от CryNet
А это не костыль?
Откуда я знаю
Если как сначала был вопрос
Сообщение от CryNet
нужно, чтобы записи нашлись по тому что прилетает в search, а потом были отфильтрованы по тому что прилетело в category
То можно и так, через filter.
А если
Сообщение от CryNet
Алогорим такой:
- нашли статьи по категории
- в эти найденных статьях нашли статьи, в которых содержится искомое слово
То как ksa, написал.
Каков вопрос, таков ответ.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При мульти загрузке дублирует записи в базу. Как можно исправить? makarow.dmitry jQuery 0 20.12.2014 20:16
Как при аякс запросе вытащить теги по селектору из того, что он вернул? Hurray jQuery 0 16.04.2014 18:45
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
Как установить кодировку при записи в MySQL Arfey Общие вопросы Javascript 6 14.06.2010 18:00