Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Как при запросе к Mongo отфильтров. записи, а потом снова отфильтров. по др. парам. (https://javascript.ru/forum/node-js-io-js/83843-kak-pri-zaprose-k-mongo-otfiltrov-zapisi-potom-snova-otfiltrov-po-dr-param.html)

CryNet 31.03.2022 23:31

Как при запросе к 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. Заранее спасибо

voraa 01.04.2022 07:19

Получаешь из posts массив (await posts.toAtrray(), кажется. Сам посмотри доки). А потом фильтруешь его обычным .filter

ksa 01.04.2022 07:32

Цитата:

Сообщение от CryNet
а потом то что нашлось снова было отфильтровано по другому параметру?

Монго может сразу не только фильтровать но и сортировать полученное.
Mongoose не используем...
Используем mongojs, но сути это наверняка не меняет.
db.test.find(query).sort({key1: 1, key2: -1})

CryNet 01.04.2022 10:03

Цитата:

Сообщение от voraa (Сообщение 544452)
А потом фильтруешь его обычным .filter

А это не костыль?

CryNet 01.04.2022 10:04

Цитата:

Сообщение от ksa (Сообщение 544453)
Монго может сразу не только фильтровать но и сортировать

Ага, то есть варик должен быть. Но сортировка мне не нужна, пока по крайней мере

ksa 01.04.2022 11:29

Цитата:

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

Это я уже зарапортовался... :(

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

CryNet 01.04.2022 12:19

Цитата:

Сообщение от ksa (Сообщение 544460)
Пока не понятно зачем брать больше, а потом это все еще раз фильтровать?

Та мне так-то и не нужно. Мне просто нужно статьи отфильтровать по категории и найти статьи, в которых содержится искомое слово.

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

Если это будет 1 запрос -- это то, что мне нужно

ksa 01.04.2022 12:43

Цитата:

Сообщение от CryNet
Если это будет 1 запрос -- это то, что мне нужно

Такой?
{
	category: new RegExp(category, 'ig'),
	$or:[
		{title: new RegExp(search, 'ig')},
		{text: new RegExp(search, 'ig')},
	]
}

Т.е. ты расскажи чего хочешь искать в итоге?

CryNet 01.04.2022 12:54

Цитата:

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

Такой.

Хочу в БД найти статьи, который содержат указанную категорию и истомый текст. В постмане это выглядит так:
https://ibb.co/qmxrh7H

voraa 01.04.2022 13:40

Цитата:

Сообщение от CryNet
А это не костыль?

Откуда я знаю
Если как сначала был вопрос
Цитата:

Сообщение от CryNet
нужно, чтобы записи нашлись по тому что прилетает в search, а потом были отфильтрованы по тому что прилетело в category

То можно и так, через filter.
А если
Цитата:

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

То как ksa, написал.
Каков вопрос, таков ответ.


Часовой пояс GMT +3, время: 06:00.