繁体   English   中英

Perl MongoDB API-过滤器中的正则表达式

[英]Perl MongoDB API - regular expression in filters

我正在使用MongoDB在Perl中工作。 我有一个包含具有大文本字段的文档的集合,我需要能够查找该字段中包含多个字符串的所有行。

因此,例如,如果这是电影报价数据库,则一行将具有值:

我们必须彻底销毁阿拉基斯地区所有的香料生产。 公会和整个宇宙取决于香料。 可以摧毁事物,控制事物的人。

我希望能够用“ spice”,“ Arrakis”和“ Guild”这两个词来匹配该行,所有这些词都必须在文本中。

我当前的方法只有在提供的条款碰巧正确时才能实现匹配,即:

$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接口中的某个字段获得多个破解?

一种方式:一堆积极的前瞻性断言:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;
my @tests = ("The Guild demands that the spice must flow from Arrakis",
             "House Atreides will be transported to Arrakis by the Guild.");
for my $test (@tests) {
  if ($test =~ m/^(?=.*spice)
                  (?=.*Guild)
                  (?=.*Arrakis)/x) {
    say "$test: matches";
  } else {
    say "$test: fails";
  }
}

生产:

公会要求香料必须来自Arrakis:火柴

莱托公爵将被公会运送到阿拉基斯:失败

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM