Spring Boot整合MongoDB使用find*()查询时出现locale字段无效错误
解决Spring Data MongoDB中"Field 'locale' is invalid"查询错误
兄弟,这个错误的根源其实是你在@Document注解上犯了一个属性混淆的小错误!
看你的Company实体类:
@Document(collation = "company") public class Company { // ... }
这里的collation参数根本不是用来指定集合名称的!它是MongoDB用来配置排序规则的(比如控制大小写是否敏感、语言特定的排序逻辑)。Spring Data MongoDB把你传入的"company"当成了collation的locale参数值,在生成查询时自动加上了{ locale: "company" }这个条件——但MongoDB根本不认识"company"这个合法的locale值,所以就抛出了你看到的这个奇怪错误。
而你真正想要指定集合名称的话,应该用collection属性,把注解改成这样:
@Document(collection = "company") // 替换collation为collection public class Company { private int id; private String name; private List<Product> products; private Contact contact; public Company(int id, String name, List<Product> products, Contact contact) { this.id = id; this.name = name; this.products = products; this.contact = contact; } // 省略getter和setter方法 }
至于为什么之前count()能正常工作?因为count操作不需要构建带collation的查询逻辑,所以没触发这个错误;而所有find系列方法(包括自定义查询)都会自动应用你配置的collation参数,才导致了问题。
修改完注解之后,再去测试你的findByName和findByAddress方法,应该就能正常执行了!
内容的提问来源于stack exchange,提问作者Akhil Patro
相关产品推荐
相关产品推荐

