MongoDB 正規表現 (Regex) と例

正規表現はパターン マッチングに使用されます。パターン マッチングは、基本的にドキュメント内の検出文字列に対して行われます。

コレクション内のドキュメントを取得するときに、検索する正確なフィールド値が正確にわからない場合があります。 したがって、正規表現を使用すると、パターン マッチング検索値に基づいたデータの取得を支援できます。

パターンマッチングに$regex演算子を使用する

当学校区の 正規表現演算子 MongoDB コレクション内の特定の文字列を検索するために使用されます。次の例は、これがどのように実行されるかを示しています。

「Employeeid」と「EmployeeName」というフィールド名を持つ同じ従業員コレクションがあると仮定します。また、コレクションに次のドキュメントがあると仮定します。

従業員ID 従業員名
22 ニューマーティン
2 モハン
3 ジョー
4 モハンR
100 Guru99
6

以下のコードでは、正規表現演算子を使用して検索条件を指定しています。

$regex の使用 Operaパターンマッチング用のtor

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

コードの説明:

  1. ここでは、文字「Gu」を含むすべての従業員名を検索します。したがって、$regex演算子を指定して、「Gu」の検索条件を定義します。
  2. printjson は、クエリによって返された各ドキュメントをより適切な方法で印刷するために使用されます。

コマンドが正常に実行されると、次の出力が表示されます。

出力:

$regex の使用 Operaパターンマッチング用のtor

出力には、従業員名に「Gu」文字が含まれるドキュメントが返されることが明確に示されています。

コレクションに次のドキュメントがあり、従業員名が「Guru999」である追加ドキュメントがあるとします。検索条件に「Guru99」と入力すると、「Guru999」を含むドキュメントも返されます。しかし、これではなく、「Guru99」を含むドキュメントのみを返したいとします。その場合は、正確なパターン マッチングでこれを行うことができます。正確なパターン マッチングを行うには、^ と $ 文字を使用します。文字列の先頭に ^ 文字を追加し、文字列の末尾に $ を追加します。

従業員ID 従業員名
22 ニューマーティン
2 モハン
3 ジョー
4 モハンR
100 Guru99
6
8 Guru999

次の例は、これを実行する方法を示しています。

$regex の使用 Operaパターンマッチング用のtor

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)

コードの説明:

  1. ここの検索条件では、^ および $ 文字を使用しています。 ^ は文字列が特定の文字で始まることを確認するために使用され、$ は文字列が特定の文字で終わることを確認するために使用されます。 したがって、コードが実行されると、「Guru99」という名前の文字列のみがフェッチされます。
  2. printjson は、クエリによって返された各ドキュメントをより適切な方法で印刷するために使用されます。

コマンドが正常に実行されると、次の出力が表示されます。

出力:

$regex の使用 Operaパターンマッチング用のtor

出力では、文字列「Guru99」がフェッチされたことがはっきりとわかります。

$options を使用したパターン マッチング

正規表現演算子を使用する場合、 $ options キーワード。 たとえば、大文字と小文字が区別されるかどうかに関係なく、従業員名に「Gu」が含まれるすべてのドキュメントを検索したいとします。 そのような結果が必要な場合は、次を使用する必要があります。 $ options 大文字と小文字を区別しないパラメーターを使用します。

次の例は、これを実行する方法を示しています。

「Employeeid」と「EmployeeName」というフィールド名を持つ同じ Employee コレクションがあると仮定しましょう。

また、コレクションに次の文書があると仮定します。

従業員ID 従業員名
22 ニューマーティン
2 モハン
3 ジョー
4 モハンR
100 Guru99
6
7 達人99

ここで、前のトピックと同じクエリを実行すると、結果に「GURU99」を含むドキュメントが表示されることはありません。 これが結果セットに確実に含まれるようにするには、$options "I" パラメーターを追加する必要があります。

$options を使用したパターン マッチング

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)

コードの説明:

  1. $options に 'I' パラメーター (大文字と小文字を区別しないことを意味します) を指定すると、'Gu' の文字が小文字で見つかったか大文字で見つかったかに関係なく検索を実行するように指定されます。

コマンドが正常に実行されると、次の出力が表示されます。

出力:

$options を使用したパターン マッチング

  1. 出力を見ると、ある文書に大文字の「Gu」が含まれていても、その文書は結果セットに表示されることが明確にわかります。

正規表現演算子を使用しないパターンマッチング

正規表現演算子を使用せずにパターン マッチングを行うこともできます。次の例は、その方法を示しています。

正規表現を使用しないパターン マッチング Operaタ

db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)

コードの説明:

  1. 「//」オプションは基本的に、これらの区切り文字内に検索条件を指定することを意味します。 したがって、/Gu/ を指定して、EmployeeName に「Gu」が含まれるドキュメントを再度検索します。

コマンドが正常に実行されると、次の出力が表示されます。

出力:

正規表現を使用しないパターン マッチング Operaタ

出力には、従業員名に「Gu」文字が含まれるドキュメントが返されることが明確に示されています。

コレクションから最後の「n」個のドキュメントを取得する

コレクション内の最後の n 個のドキュメントを取得するには、さまざまな方法があります。

次の手順で方法の1つを見てみましょう

次の例は、これを実行する方法を示しています。

「Employeeid」と「EmployeeName」というフィールド名を持つ同じ Employee コレクションがあると仮定しましょう。

また、コレクションに次のドキュメントがあると仮定します。

従業員ID 従業員名
22 ニューマーティン
2 モハン
3 ジョー
4 モハンR
100 Guru99
6
7 達人99

コレクションから最後の「n」個のドキュメントを取得する

db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

コードの説明:

1) ドキュメントをクエリするときに、コレクション内の _id フィールド値に基づいてレコードを逆順に並べ替える sort 関数を使用します。-1 は基本的に、最後のドキュメントが最初に表示されるように、ドキュメントを逆順または降順で並べ替えることを示します。

2) 次に、limit 句を使用して、必要なレコード数を表示します。 ここでは、limit 句 (2) を設定しているため、最後の XNUMX つのドキュメントがフェッチされます。

コマンドが正常に実行されると、次の出力が表示されます。

出力:

コレクションから最後の「n」個のドキュメントを取得する

出力には、コレクション内の最後の 2 つのドキュメントが表示されていることが明確に示されています。したがって、コレクション内の最後の 'n' 個のドキュメントを取得するには、まずドキュメントを降順で並べ替え、次に limit 句を使用して必要な 'n' 個のドキュメントを返すことができることが明確に示されています。

注意注: 38,000 文字を超える文字列に対して検索を実行すると、正しい結果が表示されません。

製品概要

  • パターン マッチングは $regex 演算子によって実現できます。この演算子は、コレクション内の特定の文字列を検索するために使用できます。
  • ^ および $ 記号は正確なテキスト検索に使用できます。^ は文字列が特定の文字で始まることを確認するために使用され、$ は文字列が特定の文字で終わることを確認するために使用されます。
  • 'i' を $regex 演算子と一緒に使用すると、大文字と小文字を区別しないことを指定できるため、文字列が小文字か大文字かに関係なく検索できます。
  • 区切り文字 // はパターン マッチングにも使用できます。
  • sort 関数と limit 関数を組み合わせて使用​​し、コレクション内の最後の n 個のドキュメントを返します。 sort 関数を使用してドキュメントを降順で返すことができ、その後、limit 句を使用して返されるドキュメントの数を制限できます。