MongoDB $或查询

时间:2013-01-26 07:47:50

标签: mongodb mongodb-shell

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

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

它只是按预期返回任何内容(JSON)?

1 个答案:

答案 0 :(得分:46)

使用$ in

对于问题中的查询,使用$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"] } } );