$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"] } } );