我在mongo shell中运行以下查询:
db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
它只是按预期返回任何内容(JSON)?
答案 0 :(得分:46)
对于问题中的查询,使用$in
更合适db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
缺少报价 - cli正等着你完成你的第二部分:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
您需要充分完成查询,以便cli解析它,然后说出语法错误。
如评论所示,如果您想以不区分大小写的方式进行搜索,那么您可以使用$or
$regex来使用
db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
或者,您只需使用一个正则表达式:
db.Profiles.find ( { "name" : /^(gary|rob)/i } )
然而,不以固定字符串开头的正则表达式查询不能使用索引(它不能使用索引并且有效地“从此处开始直到找不到匹配然后保释”)因此是次优的。如果这是您的要求,最好存储一个规范化的名称字段(例如name_lc
- 小写名称)并对其进行查询:
db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );