MongoDB 正規表現 (Regex) と例

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

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

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

また, MongoDB の正規表現演算子 コレクション内の特定の文字列を検索するために使用されます。 次のことwing この例は、これを行う方法を示しています。

「Employeeid」と「EmployeeName」というフィールド名を持つ同じ Employee コレクションがあると仮定しましょう。 また、次のようなものがあると仮定しましょうwing 私たちのコレクションにある文書。

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

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

$regex 演算子を使用したパターン マッチング

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

コードの説明:

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

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

出力:

$regex 演算子を使用したパターン マッチング

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

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

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

次のことwing この例は、これを行う方法を示しています。

$regex 演算子を使用したパターン マッチング

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

コードの説明:

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

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

出力:

$regex 演算子を使用したパターン マッチング

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

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

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

次のことwing この例は、これを行う方法を示しています。

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

また、次のようなものがあると仮定しましょうwing 私たちのコレクションにある文書。

従業員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' の文字が小文字で見つかったか大文字で見つかったかに関係なく検索を実行するように指定されます。

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

出力:

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

  1. この出力は、XNUMX つのドキュメントに大文字の 'Gu' が含まれていても、そのドキュメントが結果セットに表示されることを明確に示しています。

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

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

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

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

コードの説明:

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

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

出力:

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

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

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

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

次の方法の XNUMX つを見てみましょうwing ステップ

次のことwing この例は、これを行う方法を示しています。

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

また、次のようなものがあると仮定しましょうwing 私たちのコレクションにある文書:

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

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

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

コードの説明:

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

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

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

出力:

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

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

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

まとめ

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