Spring 数据 mongodb 存储库查找所有字段排除



我对 spring data mongodb 存储库有一个奇怪的问题。我想从我的findAll请求中排除一个字段。我怎样才能做到这一点?

这非常有效:

@Query(fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findByObjectIdAndServiceIgnoreCase( String objectId, String service, Pageable pageable );

但是没有机会findAll

@Query(fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findAll( Pageable pageable );

这将引发:

引起: org.springframework.data.mapping.PropertyReferenceException: No 属性查找所有找到类型为对象历史记录! 在 org.springframework.data.mapping.PropertyPath.(属性路径.java:75) 在 org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327) 在 org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307) 在 org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270) 在 org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241) 在 org.springframework.data.repository.query.parser.Part.(部分.java:76)

添加一个空的筛选条件将为您解决问题:

@Query(value = "{}", fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findAll(Pageable pageable);

显然,当您不指定value参数来过滤结果时,Spring Data 会尝试从方法名称派生查询,并且不知何故无法识别 findAll 的特殊含义。

由于您没有为@Query注释提供字段,Spring 将尝试将方法名称 findAll 转换为不遵守 Spring 查询创建规范的查询。请在此处查看规格。

这应该适合您:

@Query(value = "{}", fields = "{'objectContentAsJson':0}")
Page<ObjectHistory> findAll(Pageable pageable);