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

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

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

推荐答案

使用$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"] } } );

Mongodb相关问答推荐

MongoDB通过查找具有多个数组的对象进行聚合

在单个mongo文档中组合数组与聚合

字段$set聚合导致错误美元($)前缀字段$concatArrays对于存储无效"

MongoDB v4.4聚合的$getfield替代方案

Mongo $sort然后$group,顺序能保证吗?

MongoDB - 来自先前匹配文档的聚合匹配字段

mongodb.将文档分组在数组中,对它们进行评分计数和求和并添加新字段

如何使用 MindsDB 和 MQL(对于我的 MongoDB 实例)实施零样本分类?

如何判断 MongoDB 的两个数组中是否存在值?

从 MongoDB 中的聚合结果中获取不同的值

有没有办法从另一条记录中插入一条记录

在 MongoDB 中使用 findOneAndUpdate 有条件地更新/更新嵌入式数组

如何使用 C# MongoDB 驱动程序检索字段子集?

Clojure 和 NoSQL 数据库

Mongoose Schema vs Mongo Validator

如何对连接到 mongo 的方法进行单元测试,而不实际连接到 mongo?

使用 Java 驱动程序更新 MongoDB 中的数组

从 mongo 结果中删除 _id

如何使用 mongodb-java-driver 进行 upsert

MongoDB - $set 更新或推送数组元素