我在mongo shell中运行以下查询:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
它只是不按预期返回任何内容(JSON)?
我在mongo shell中运行以下查询:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
它只是不按预期返回任何内容(JSON)?
对于问题中的查询,使用$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"] } } );