MongoDB$or查询

MongoDB$or查询,mongodb,mongodb-shell,Mongodb,Mongodb Shell,我在mongo shell中运行以下查询: db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } ) 它只是按预期不返回任何内容(JSON)Use$in 对于问题中的查询,使用 为什么不起作用 缺少报价-cli正在等待您完成报价的第二部分,或者: db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } ) ..............

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

db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
它只是按预期不返回任何内容(JSON)

Use$in 对于问题中的查询,使用

为什么不起作用 缺少报价-cli正在等待您完成报价的第二部分,或者:

db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
您需要充分完成查询,以便cli对其进行解析,然后说有语法错误

不区分大小写的匹配 如注释所示,如果要以不区分大小写的方式进行搜索,则可以使用
$或
并使用:

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

db.Profiles.find ( { "name" : /^(gary|rob)/i } )
但是,不以固定字符串开头的正则表达式查询不能使用索引(它不能使用索引,实际上是“在未找到匹配项之前从此处开始”,然后再执行bail”),因此是次优的。如果这是您的要求,最好存储一个规范化的名称字段(例如
name\u lc
-小写名称)并查询:

db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );
使用$in 对于问题中的查询,使用

为什么不起作用 缺少报价-cli正在等待您完成报价的第二部分,或者:

db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
您需要充分完成查询,以便cli对其进行解析,然后说有语法错误

不区分大小写的匹配 如注释所示,如果要以不区分大小写的方式进行搜索,则可以使用
$或
并使用:

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

db.Profiles.find ( { "name" : /^(gary|rob)/i } )
但是,不以固定字符串开头的正则表达式查询不能使用索引(它不能使用索引,实际上是“在未找到匹配项之前从此处开始”,然后再执行bail”),因此是次优的。如果这是您的要求,最好存储一个规范化的名称字段(例如
name\u lc
-小写名称)并查询:

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

哇,大错特错了。谢谢@ad7six您建议的查询效果更好。如果数组中的名称大写,是否需要更改语法?e、 g.name:[“Gary”,“rob”]db.Profiles.find({“name”:{$in:[/Gary/i,/rob/i]})回答了我自己的问题,我想。@founding会有用的-小心依赖无法索引的查询-适当地使用db来识别慢速查询(或用于单个查询)。否则随着时间的推移,事情会变得缓慢或不再可行。以防万一你盯着它看,不明白是怎么回事。哇,真是个大错误。谢谢@ad7six您建议的查询效果更好。如果数组中的名称大写,是否需要更改语法?e、 g.name:[“Gary”,“rob”]db.Profiles.find({“name”:{$in:[/Gary/i,/rob/i]})回答了我自己的问题,我想。@founding会有用的-小心依赖无法索引的查询-适当地使用db来识别慢速查询(或用于单个查询)。否则随着时间的推移,事情会变得缓慢或不再可行。以防万一你盯着它看,不明白什么是错的。注意,上面这个问题的语法错误,最初的问题,是在以后的编辑中得到的。我已经恢复了编辑,编辑一个OPs原始问题是没有帮助的。注意,上面这个问题的语法错误,最初的问题,稍后通过编辑获得。我已还原该编辑,不可能编辑OPs原始问题之一。