如何通过SpringBoot从MongoDB中仅获取ObjectID列表?
直接返回ObjectID列表的实现方式
你可以直接修改方法的返回类型为List<ObjectId>,同时调整@Query的投影配置,Spring Data MongoDB会自动将查询到的文档ID映射为ObjectID对象,无需通过String中转。
修改后的代码
@Query(value="{ 'studentsList.$id': ?0 }", fields="{'_id': 1}") List<ObjectId> findAllByStudentID(ObjectId studentId);
关键说明
- 替换返回类型:把
List<Subject>改为List<ObjectId>,Spring Data会自动处理_id字段到ObjectID的映射。 - 修正投影字段:投影时使用
_id(MongoDB文档ID的默认字段名),而非原代码中的$id,$id仅用于查询子文档ID的匹配逻辑,投影时直接指定_id即可。
更简洁的替代方案(无需@Query)
如果使用的是Spring Data MongoDB 2.x及以上版本,还可以通过方法命名规则实现,无需手动编写查询语句:
List<ObjectId> findByStudentsListId(ObjectId studentId);
Spring Data会自动解析方法名,生成匹配studentsList.id的查询,并直接返回ObjectID列表。
内容的提问来源于stack exchange,提问作者OddyUlrich
相关产品推荐
相关产品推荐

