如何用MongoDB查询字段值全为小写字符串的文档?
MongoDB 查询全小写字符串字段的可行方案
当然可以实现这种查询,不过你给出的伪查询写法无法直接运行——普通查询条件里不能直接使用聚合操作符,需要借助$expr来包裹聚合表达式逻辑。
正确的查询写法
用$expr把聚合表达式作为查询条件,对比字段本身和它的小写转换结果是否相等:
db.collection.find({ $expr: { $eq: ["$address", { $toLower: "$address" }] } })
这个查询会返回所有address字段值本身就是全小写的文档(比如{"address": "123 main st"}),同时过滤掉包含大写字母的文档(比如{"address": "123 Main St"})。
性能提示
如果集合数据量较大,这类查询会对每个文档执行$toLower计算,没法利用常规索引,可能影响性能。如果需要频繁做这类查询,建议:
- 新增一个衍生字段(比如
address_lower),在写入或更新文档时同步存储address的小写值 - 直接查询
address与address_lower相等的文档,或者基于address_lower做匹配,这样就能利用索引提升效率
内容的提问来源于stack exchange,提问作者Benji
相关产品推荐
相关产品推荐

