MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBでフィールド内の文字列や数値を検索する方法($in演算子の使い方)

MongoDBでは、フィールドに格納された値が「数値」なのか「文字列」なのかを意識せず、両方をまとめて検索したいケースがあります。そのような場合に便利なのが $in 演算子です。$in演算子を使えば、複数の候補値を配列で指定し、いずれかに一致するドキュメントを一度のクエリで取得できます。

サンプルコレクションの作成

まずは、同じ名前のフィールドに「数値」と「文字列」が混在したドキュメントを持つコレクションを作成してみましょう。

> db.searchForStringOrNumberDemo.insertOne(
    {
        "_id": new ObjectId(),
        "StudentName": "Larry",
        "StudentDetails": {
            "StudentMarks": {
                "StudentMongoDBMarks": [44]
            }
        }
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce2407c36e8b255a5eee944")
}
> db.searchForStringOrNumberDemo.insertOne( { "_id": new ObjectId(), "StudentName": "Larry", "StudentDetails": { "StudentMarks": { "StudentMongoDBMarks": ["44"] } } } );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce240f036e8b255a5eee945")
}

この例では、1つ目のドキュメントには数値の 44、2つ目のドキュメントには文字列の "44" が格納されています。MongoDBは型を厳密に区別するため、この2つは異なる値として扱われます。

登録済みドキュメントの確認

find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。

> db.searchForStringOrNumberDemo.find().pretty();

実行すると、次のような出力が得られます。

{
    "_id" : ObjectId("5ce2407c36e8b255a5eee944"),
    "StudentName" : "Larry",
    "StudentDetails" : {
        "StudentMarks" : {
            "StudentMongoDBMarks" : [
                44
            ]
        }
    }
}
{
    "_id" : ObjectId("5ce240f036e8b255a5eee945"),
    "StudentName" : "Larry",
    "StudentDetails" : {
        "StudentMarks" : {
            "StudentMongoDBMarks" : [
                "44"
            ]
        }
    }
}

$in演算子で文字列と数値を同時に検索する

それでは本題です。フィールド内の文字列または数値を検索するには、$in演算子の配列に「文字列の値」と「数値の値」の両方を指定します。

> db.searchForStringOrNumberDemo.find({"StudentDetails.StudentMarks.StudentMongoDBMarks": { "$in": ["44", 44] } });

このクエリを実行すると、次のように両方のドキュメントが取得できます。

{ "_id" : ObjectId("5ce2407c36e8b255a5eee944"), "StudentName" : "Larry", "StudentDetails" : { "StudentMarks" : { "StudentMongoDBMarks" : [ 44 ] } } }

{ "_id" : ObjectId("5ce240f036e8b255a5eee945"), "StudentName" : "Larry", "StudentDetails" : { "StudentMarks" : { "StudentMongoDBMarks" : [ "44" ] } } }

ポイントまとめ

  • MongoDBでは 44(数値)と "44"(文字列)は別の値として扱われるため、通常の等価一致では片方しかヒットしません。
  • $in演算子に両方の型の値を渡すことで、1回のクエリでどちらにもマッチさせることができます。
  • ネストされたフィールドを検索する場合は、ドット記法(例:"StudentDetails.StudentMarks.StudentMongoDBMarks")でパスを指定します。

  1. JavaScriptのRegExpで正規表現に一致する文字列を検索する方法(execメソッドの使い方)

    JavaScriptで文字列の中から正規表現(RegExp)に一致するテキストを検索するには、exec()メソッドを使用します。このメソッドは、一致が見つかった場合に結果を配列として返し、一致しなかった場合にはnullを返します。 exec()メソッドのパラメータ string − 検索対象となる文字列を指定します。 戻り値について exec()メソッドは、一致が見つかった場合、最初の要素にマッチしたテキストそのものを含む配列を返します。また、この配列にはindexプロパティ(一致した位置)やinputプロパティ(検索元の文字列)といった追加情報も含まれています。正規表現に「g」フラグを付

  2. JavaScriptで文字列を検索する方法【search()メソッドの使い方を解説】

    JavaScriptで文字列を検索する方法 JavaScriptで文字列の中から特定の文字列を探すには、search()メソッドを使用します。このメソッドは、引数に渡した文字列(または正規表現)が対象の文字列内で最初に一致した位置(インデックス)を返し、見つからなかった場合は -1 を返します。 以下は、JavaScriptで文字列を検索するサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8" />