MongoDB $或查询

Fru*_*ful 18 mongodb mongodb-shell

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

db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
Run Code Online (Sandbox Code Playgroud)

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

AD7*_*six 48

使用$ in

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

db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
Run Code Online (Sandbox Code Playgroud)

为什么不起作用

有一个缺失的引用 - cli正等着你完成你或你的第二部分:

db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
Run Code Online (Sandbox Code Playgroud)

您需要充分完成查询,以便cli解析它,然后说出语法错误.

不区分大小写的匹配

正如评论所指出的,如果你想在不区分大小写的方式进行搜索,那么你要么使用$or一个$正则表达式:

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

或者,您只需使用一个正则表达式:

db.Profiles.find ( { "name" : /^(gary|rob)/i } )
Run Code Online (Sandbox Code Playgroud)

但是,不以固定字符串开头的正则表达式查询不能使用索引(它不能使用索引并且有效地"从此处开始直到找不到匹配然后保释")因此是次优的.如果这是您的要求,最好存储一个规范化的名称字段(例如name_lc- 小写名称)并对其进行查询:

db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );
Run Code Online (Sandbox Code Playgroud)