У меня есть две коллекции. В одной коллекции я сохранил строки поиска, в то время как в других есть фактические данные. Мне нужно найти записи из коллекции данных на основе строк поиска, хранящихся в коллекции поиска.
(1) Поиск в коллекции:
[{_id:123, search: paris}, <br/>
{_id:123, search: london}, <br/>
{_id:123, search: tokyo}] <br/>
(2) Сбор данных:
[{_id:123, content: Paris is capital of France}, <br/>
{_id:123, content: Have you ever went to London?}, <br/>
{_id:123, content: Where is Tokyo?}, <br/>
{_id:123, content: I heard about Singapore as well}]
Проблема в том, что у меня более 50 строк поиска, а при сборе данных у меня миллионы записей. Моя текущая реализация выглядит следующим образом:
const src = await SearchCollection.find();<br/>
for (let i = 0; i (is less than) src.length; i++) { <br/>
let msg = await DataCollection.find({ <br/>
content: { <br/>
$regex: new RegExp(src[i].search)), <br/>
$options: "gi" <br/>
} <br/>
}); <br/>
Очевидно, что этот запрос очень медленный. Если имеется 50 строк поиска, он будет циклически повторяться 50 раз, а также содержимое данных исчисляется миллионами. Как бороться с моим текущим сценарием?