MongoTemplate使用in查询gstin字段时未返回全部匹配记录问题
问题排查方案
你使用的criteria = Criteria.where("gstin").in(gstinList);是标准的Spring Data MongoDB IN查询语法,按逻辑应该返回所有匹配的3条记录,出现仅返回2条的情况可按以下优先级排查:
最可能原因:类型/值不匹配
- 检查数据库中
gstin字段的类型和查询传入值的类型是否一致:
比如数据库里某条1234的记录存的是字符串"1234",但你传入的gstinList里是数值类型的1234,MongoDB会严格匹配类型,类型不同的记录不会被命中;反过来如果库中是数值、传入的是字符串也会出现同样问题。 - 检查未命中的那条1234记录的字段值是否包含不可见字符:比如前后空格、换行符、特殊符号,导致和查询参数无法完全匹配。
次可能原因:存在额外过滤条件
- 检查是否配置了全局查询拦截:比如逻辑删除(自动追加
deleted = false过滤)、多租户隔离(自动追加租户ID过滤)、数据权限拦截,未命中的那条记录可能不符合额外的全局过滤条件。 - 检查查询逻辑后续是否追加了其他限制:比如调用了
limit(2)、分页参数pageSize=2、distinct("gstin")去重查询,都会导致返回条数少于实际匹配数。
验证方法
你可以开启Spring Data MongoDB的DEBUG日志,配置日志包org.springframework.data.mongodb.core的级别为DEBUG,拿到实际生成执行的MongoDB原生查询语句,直接在Mongo Shell或者可视化工具中执行该语句:
- 如果直接执行原生查询也只返回2条,说明是数据本身的问题(类型/值不匹配、额外条件命中)
- 如果直接执行原生查询返回3条,说明是代码中查询后处理逻辑(分页、结果过滤)导致的条数丢失。
内容的提问来源于stack exchange,提问作者pavan kumar
相关产品推荐
相关产品推荐

