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

基于地图查找的mongodb spring数据

子车海
2023-03-14

Spring data提供了各种用于CRUD、分页和mongob排序的存储库。当我们需要来自mongob的使用各种属性的文档时,我们倾向于编写findBy方法或编写带有显式查询的方法,并用@Query注释。但是如果我的文档有许多属性并且我需要各种获取文档的方法,Spring是否提供了一种“存储库方法”来接收属性和值的Map?编写各种findBy可能很麻烦。使用QueryDSL似乎是一种选择,但需要代码生成和build.gradle更改。如果基于map的解决方案不可用,我可以使用QueryDSL。

对于ex:

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] )

我愿意使用Criteria/Query组合或BasicDBObject编写此方法,如果Spring数据不能开箱即用地提供此功能,则使用MongoAction接口。

共有1个答案

姬英武
2023-03-14

我不确定Spring Data是否可以轻松做到。但是如果您愿意使用MongoDB的BasicDBObject来获得您需要的东西,那么您可以通过以下方式使用它:

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); 
}
 类似资料:
  • 问题内容: 该脚本绘制控件,英雄,表面和地图: 有一个英雄,当玩家使用控件移动他时必须重新绘制,所有其他可绘制对象也必须重新绘制。问题在于绘制地图是一个漫长的过程,因此我创建的地图越大,英雄移动的速度就越慢,因为必须绘制地图的每个图块。有没有一种方法可以将所有图块以其他方法放置到一个位图,然后在canvas方法中绘制该位图? 问题答案: 最好的选择是只绘制地图在屏幕上可见的部分。这样,无论整个地图

  • 这是我得到的错误消息

  • 在我前面的问题中 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 258 4 418 1 676 5 109 46 177 11 286 57 463 68 750 25 121 393 196 418 317 811 514 229 832 040 尽管Java8中函数的代码风格表示仍然让我感到困惑,但我可以肯定它与fibonacci序列的

  • 本文向大家介绍查找图的匹配数,包括了查找图的匹配数的使用技巧和注意事项,需要的朋友参考一下 问题陈述 下图的匹配数字是多少? 解 顶点数= 9 我们只能匹配8个顶点。 匹配号码为4。

  • 有没有想过为什么使用Dociety的ODM会在同一个查询上返回零结果? 更新#1看起来教义\MongoDB\Query\Builder::near()L363有问题。方法参数忽略第二个值($Y)。因此只传递要执行的第一个值。