MongoDB でフィールドに文字列が含まれていることを確認する

Tahseen Tauseef 2023年6月20日
  1. MongoDB で regex を使用する
  2. MongoDB でフィールドに文字列が含まれているかどうかを確認する
  3. フィールドに文字列が含まれているかどうかを確認する (大文字と小文字を区別しない)
  4. フィールドに文字列が含まれているかどうかを確認する (結果なし)
  5. フィールドに特定の開始文字列が含まれているかどうかを確認する
  6. フィールドに特定の終了文字列が含まれているかどうかを確認する
MongoDB でフィールドに文字列が含まれていることを確認する

この投稿では、MongoDB で正規表現を使用して、フィールドに文字列が含まれているかどうかを判断する方法に取り組みます。

MongoDB で regex を使用する

正規表現 (regex) は、検索パターンを定義するテキスト文字列です。 いくつかの regex エンジンは若干異なる構文で書かれていますが、基本は同じです。

regex 式は、次の例のように両側に 1つのスラッシュ (/) で囲まれた文字列 (一連の文字) です。

db.collection.find({
    "k": /pattern/
  })

しかし現在、シェルの正規表現は mongoplayground.net, のクエリでは機能しないため、代わりに以下の式を使用できます。

db.collection.find({
    "k": {
      "$regex": "pattern"
    }
  })

MongoDB の $regex 演算子は、文字列を含むクエリを見つけるために使用されます。 MongoDB では、regular expression を使用して、クエリを介して文字列内のパターンを検索できます。

$regex 演算子は、正規表現機能を使用して、クエリ内の一致テキストをパターン化するために使用されます。

構文:

db.collection.find({"k":{$regex:"pattern"}});

$regex 正規表現演算子で渡すことができる値文字列を含むフィールドのドキュメントを表示できます。 上記の構文を理解するには、次のドキュメントを使用して teams のコレクションを作成できます。

db={
  "teams": [
    {
      team: "Manchester City ",
      position: "1st",
      points: 70
    },
    {
      team: "Liverpool",
      position: "2nd",
      points: 69
    },
    {
      team: "Chelsea",
      position: "3rd",
      points: 59
    },
    {
      team: "Arsenal",
      position: "4th",
      points: 54
    },
    {
      team: "Tottenham",
      position: "5th",
      points: 51
    },
    {
      team: "Manchester United",
      position: "6th",
      points: 50
    },

  ]
}

MongoDB でフィールドに文字列が含まれているかどうかを確認する

次のコードを使用して、チーム フィールドに文字列 Man が含まれているドキュメントがあるかどうかを確認できます。

クエリ:

db.teams.find({
  team: {
    "$regex": "Man"
  }
})

出力:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "points": 70,
    "position": "1st",
    "team": "Manchester City "
  },
  {
    "_id": ObjectId("5a934e000102030405000005"),
    "points": 50,
    "position": "6th",
    "team": "Manchester United"
  }
]

フィールドに文字列が含まれているかどうかを確認する (大文字と小文字を区別しない)

MongoDB で regex を使用して、フィールドに大文字と小文字を区別しない特定の文字列値が含まれているかどうかを確認できます。 MongoDB の正規表現で $i オプションを使用します。

$i オプションは、指定された小文字と大文字の文字列値を持つフィールドを見つけるのに役立ちます。

クエリ:

db.teams.find({
  team: {
    "$regex": "MAN",
    "options": "$i"
  }
})

出力:

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "points": 70,
    "position": "1st",
    "team": "Manchester City "
  },
  {
    "_id": ObjectId("5a934e000102030405000005"),
    "points": 50,
    "position": "6th",
    "team": "Manchester United"
  }
]

フィールドに文字列が含まれているかどうかを確認する (結果なし)

検索した特定の文字列がフィールドに含まれていない場合は、ドキュメントが見つかりませんというメッセージが表示されます。 たとえば、次のクエリを使用しているとします。

クエリ:

db.teams.find({
  team: {
    "$regex": "Wolves"
  }
})

出力:

no document found

チーム名に Wolves という文字列を含むドキュメントがないため、ドキュメントが見つかりません. という出力が得られます。

フィールドに特定の開始文字列が含まれているかどうかを確認する

MongoDB で正規表現を使用して、フィールドが特定の文字列値で始まるかどうかを調べます。

クエリ:

db.teams.find({
  team: {
    "$regex": "^C"
  }
})

出力:

[
  {
    "_id": ObjectId("5a934e000102030405000002"),
    "points": 59,
    "position": "3rd",
    "team": "Chelsea"
  }
]

MongoDB の regex の助けを借りて、文字 "C" で始まるドキュメントを 1つ見つけることに成功しました。

フィールドに特定の終了文字列が含まれているかどうかを確認する

この例で、フィールドが指定された文字列値で終わるかどうかを確認してみましょう。

クエリ:

db.teams.find({
  team: {
    "$regex": "l$"
  }
})

出力:

[
  {
    "_id": ObjectId("5a934e000102030405000001"),
    "points": 69,
    "position": "2nd",
    "team": "Liverpool"
  },
  {
    "_id": ObjectId("5a934e000102030405000003"),
    "points": 54,
    "position": "4th",
    "team": "Arsenal"
  }
]

MongoDB の regex の助けを借りて、文字 "l" で終わる 2つのドキュメントを見つけました。

この記事を通じて、MongoDB で $regex を使用してフィールドに文字列が含まれているかどうかを確認するさまざまな方法の例を学びました。