
在 spring data mongodb 的 mongotemplate 中,无需构造复杂条件即可查询集合中所有文档,直接使用空 query 对象即可实现等效于 mongosh 中 {} 的“匹配全部”语义。
在 spring data mongodb 的 mongotemplate 中,无需构造复杂条件即可查询集合中所有文档,直接使用空 query 对象即可实现等效于 mongosh 中 {} 的“匹配全部”语义。
MongoTemplate 提供了简洁且语义明确的方式——直接传入无参的 Query 实例,即可匹配集合中全部文档。这与 Mongosh 中执行 db.collection.find({}) 的行为完全一致,既高效又符合直觉。
✅ 正确写法(推荐):
List<Hierarchy> hierarchies = mongoTemplate.find(new Query(), Hierarchy.class);
该调用底层会生成一个空查询对象,在 MongoDB 驱动中被序列化为 {},不施加任何筛选条件,等价于“全量扫描”。
⚠️ 注意事项:
- 不要误用 Criteria.where("_id").exists(true) 等冗余写法——虽然 _id 字段默认必存在,但该表达式不仅可读性差,还引入了不必要的字段检查逻辑,且在某些极端场景(如手动插入缺失 _id 的文档时)可能产生意外行为;
- new Query() 是轻量级对象,无性能开销,无需缓存或复用;
- 若需分页或限制结果数量,可在 Query 上链式调用 .limit()、.skip() 或 .with(Sort),例如:
Query query = new Query().limit(100).with(Sort.by(Sort.Direction.ASC, "name")); List<Hierarchy> results = mongoTemplate.find(query, Hierarchy.class);
总结:new Query() 是 MongoTemplate 中最自然、最标准、最高效的“match all”方案,应作为默认选择;避免人为构造等效但语义模糊的 Criteria 表达式。

















