首页 文章

mongodb的 spring 数据,基于 Map 的查找

提问于
浏览
1

Spring数据为mongodb的CRUD,分页和排序提供了各种存储库 . 当我们需要使用各种属性的mongodb文档时,我们倾向于编写 findBy 方法或编写一个带有 @Query 注释的显式查询的方法 . 但是,如果我的文档有很多属性,并且我需要各种方法来获取文档,那么spring是否会提供"repository method",其中包含属性和值的映射?写各种 findBy 可能很麻烦 . 使用QueryDSL似乎是一个选项,但需要代码生成和build.gradle更改 . 如果基于 Map 的解决方案不可用,我可以使用QueryDSL .

例如:

class FooDocument {
    String id ;//mongodb ObjectId
    String name
    String version
    boolean deleteIndicator
    ... any more attributes
}

在存储库上需要一个方法

List<FooDocument> findByMap ( Map attrValMap );

调用方法(groovy)

repository.findByMap ( [ "name" : "fooname", "version" : "1.0" ] )
repository.findByMap ( [ "name" : "fooname"] )
repository.findByMap ( [ "version" : "1.0", "deleteIndicator" : false] )

我愿意使用MongoOperations接口使用 Criteria/Query 组合或 BasicDBObject 基于fetch来编写此方法,以防Spring数据提供开箱即用的功能 .

1 回答

  • 1

    为了得到你需要的东西,你可以通过以下方式使用它:

    BasicDBObject doc = new BasicDBObject("name", "fooname").append("version", "1.0");
    DBCursor cursor = find(doc);
    List<FooDocument> fooDocList = new ArrayList<FooDocument>();
    while (cursor.hasNext()) { 
        DBObject obj = cursor.next(); 
        FooDocument foo = mongoTemplate.getConverter().read(FooDocument.class, obj);  
        fooDocList.add(foo); 
    }
    

相关问题