私はmongoShellで次のクエリを実行します:
db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
期待どおりに何も返さない(JSON)?
質問のクエリには、 $ 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"] } } );