簡體   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