sql >> データベース >  >> NoSQL >> MongoDB

MongoDB$またはクエリ

    $inを使用

    質問のクエリには、$ in

    を使用する方が適切です。
    db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
    

    なぜ機能しないのか

    引用符がありません-CLIは、またはの2番目の部分が完了するのを待っています:

    db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
    ..............................................................^
    

    cliがクエリを解析して構文エラーがあると言うには、クエリを十分に終了する必要があります。

    大文字と小文字を区別しないマッチング

    コメントで示されているように、大文字と小文字を区別しない方法で検索する場合は、$orを使用します。 $ regexを使用:

    db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
    

    または、1つの正規表現を使用するだけです:

    db.Profiles.find ( { "name" : /^(gary|rob)/i } )
    

    ただし、固定文字列で始まらない正規表現クエリはインデックスを使用できないため(インデックスを使用できず、「一致するものが見つからなくなるまでここから開始してからベイル」を効果的に実行できます)、したがって最適ではありません。これが要件である場合は、正規化された名前フィールド(name_lcなど)を保存することをお勧めします。 -小文字の名前)とクエリ:

    db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );
    



    1. MongoDBのインデックスのリストを取得する

    2. MongoDBでhideIndex()がどのように機能するか

    3. Predisは「サーバーから行を読み取っているときにエラーが発生しました」

    4. MongoDB $ max