Я работаю в Perl с MongoDB. У меня есть коллекция с документами, имеющими большое текстовое поле, и мне нужно найти все строки, содержащие несколько строк в этом поле.
Так, например, если это база данных цитат из фильмов, одна строка будет иметь значение:
Мы должны полностью уничтожить все производство специй на Арракисе. Гильдия и
вся вселенная зависит от специй. Тот, кто может уничтожить вещь,
контролирует вещь.
Я хочу иметь возможность сопоставить эту строку с терминами "специя", "Арракис" и "Гильдия", где ВСЕ эти термины должны быть в тексте.
Мой нынешний подход может достичь совпадений только в том случае, если указанные условия оказываются в правильном порядке, т.е.
$db->get_collection( 'quotes' )->find( { quote => qr/spice.*Arrakis.*Guild/i } );
Это совпадение, но
$db->get_collection( 'quotes' )->find( { quote => qr/Guild.*spice.*Arrakis/i } );
не совпадает.
Если бы я работал с базой данных SQL, я мог бы сделать:
... WHERE quote LIKE '%spice%' and quote LIKE '%Arrakis%' and quote LIKE '%Guild%'
но с интерфейсом MongoDB вы получаете только один выстрел на поле.
Есть ли способ сопоставить несколько слов, когда все требуются в одном регулярном выражении, или есть другой способ получить более одного трещины в поле в интерфейсе MongoDB?