18

我在 mongo shell 中运行以下查询:

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

它只是没有按预期返回(JSON)?

4

1 回答 1

48

使用 $in

对于问题中的查询,使用$in更合适

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

为什么它不起作用

缺少引用 - cli 正在等待您完成 or 的第二部分:

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"] } } );
于 2013-01-26T07:54:56.340 回答