当前位置: 首页 > 知识库问答 >
问题:

SpringDataMongoDB-如何使用只返回有效文档的“findAll”方法

孟安民
2023-03-14

我使用SpringDataMongo作为ORM来访问我的MongoDb。我需要阅读一个MongoDb集合,其中包含我不管理内容及其有效性的文档。我面临一个问题:文档并非都是有效的,当我使用“findAll”方法时,我只捕获了一个异常。我希望找到所有有效的文档并拒绝无效的文档,而不是这种行为。

例如,我有一个带有原始布尔值的bean,在文档中,该字段被设置为String类型。因此,当我使用findAll时,我现在得到一个异常,但我希望拥有所有有效文档的列表。我的意思是,我的收藏中的一些文档由于错误的类型而无效——不能在beanJava类型中转换。我只是使用一个布尔示例,但它也可以显示为int,long,all基元Java类型。有一种方法可以用Spring data mongo做到这一点?

非常感谢,

这里是堆栈stace:

共有2个答案

鲜于俊侠
2023-03-14

感谢您以上所有的留言。

我找到了一种简单而健壮的方法来做到这一点(当我请求findAll查询时拒绝无效文档)。

下面是一个名为Customer的bean示例。

DBCollection collection = mongoTemplate.getCollection("customer");
DBCursor cursor = collection.find();
while (cursor.hasNext()) { 
  DBObject obj = cursor.next();
  try {
    Customer instance = mongoTemplate.getConverter().read(Customer.class, obj);  
    // We have now the Customer instance 
  } catch(Exception exception) {
    System.err.println("ERROR: Cannot convert to Customer this DBObject " + obj);
  }
}

我希望这能有所帮助!

夏景胜
2023-03-14

您可以使用只返回有效数据的WHERE子句创建自定义查询。

为此,必须以以下方式创建ObjectRepositoryCustom.java接口:

@Repository
public interface ObjectRepositoryCustom {

    //Where "o.field" is the field you have to check to decide if it's valid or not
    @Query("SELECT o FROM Object o WHERE o.field = somethingThatValidsIt")
    public List<Object> customFindAll();

}

然后进入ObjectRepository.java并以以下方式添加扩展ObjectRepositoryCustom

//import your custom repository here
@Repository
public interface ObjectRepository extends JpaRepository<Object,Long>, ObjectRepositoryCustom {

}

注意,我使用了“对象”类型,因为我不知道你的类的名字。

然后可以像这样调用查询方法。

private final ObjectRepository objectRepository;
List<Object> result = objectRepository.customFindAll();

我希望它能有所帮助!

 类似资料:
  • 我希望使用方法获得表中所有值的列表。 这是我尝试过的: user.java IUserDAO.java UserRepository.java IntelliJ生成的代码: UserController.java 我得到的输出总是。为什么?

  • 本文向大家介绍SpringDataMongoDB多文档事务的实现,包括了SpringDataMongoDB多文档事务的实现的使用技巧和注意事项,需要的朋友参考一下 一、安装MongoDB4.0.3(××) 1.1、官方安装文档 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/ 1.2、tar.gz包下载地址 h

  • 我的: 错误: 原因:org。springframework。数据地图。PropertyReferenceException:找不到用户类型的属性findAll 参考-http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.html?i

  • 我为此使用了一个服务类,但为了最小的可重复示例而删除了它。目前findAll()正在返回一个空数组,而它应该从h2返回一个带有员工实体json的数组。我仍然不清楚Spring如何将数据处理到h2数据库中,所以我想这可能是我的问题的根源。 控制器: 存储库: 实体: 数据sql: schema.sql:

  • 问题内容: 这可以返回一个字符串: 但是我无法获取返回的html文档。这不起作用: 很抱歉成为菜鸟! 编辑: 我已经在单独的文档中使用了html。所以我需要返回文档,或者以某种方式读取/解析它,所以我不只是重新输入所有的html … 编辑: 我的web.xml中有这个 还有其他我可以放的东西,所以它只是返回一个文件,例如… 问题答案: 您可以从Servlet本身 打印 HTML (不建议使用) 或