2

我已经按照本教程设置了 MongoDB

http://www.littlelostmanuals.com/2011/09/spring-mongodb-type-safe-queries.html

一切都按预期工作,但现在我被困在我希望能够查询多个字段的地步。

目前,我为要保存的每种类型都有存储库接口,并且可以在单个字段上进行搜索。

public interface StartedEventRepository extends 
    MongoRepository<DatablockStartedEvent, String>,
    QueryDslPredicateExecutor<DatablockStartedEvent> { 

}

下面是单个参数的查询。

        return startedEventRepo
            .findOne(QDatablockStartedEvent.datablockStartedEvent.searchId
                    .eq(searchId));

是否可以创建一个 Query 对象,我可以在其中说类似于以下内容。

if(someName != null){
    query.where(QMyClass.name.eq(someName));
}
if(someTime != null){
    query.where(QMyClass.time.eq(someTime));
}

List result = query.list();

我试过查看 MongodbQuery 但我无法让它工作。有任何想法吗?

我看到了一个例子http://www.mkyong.com/mongodb/spring-data-mongodb-update-document/但这使用了mongoTemplate。有没有办法通过存储库来实现这一点,如果没有,它们没用吗?

4

2 回答 2

9

这应该是可能的。像这样的东西也许

BooleanBuilder builder = new BooleanBuilder();

if(someName != null){
    builder.and(QMyClass.name.eq(someName));
}
if(someTime != null){
    builder.and(QMyClass.time.eq(someTime));
}

repository.findAll(builder.getValue())
于 2012-05-30T06:38:17.990 回答
1

在没有使用过 Spring Data 的情况下,我会从阅读这个http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/#mongodb.repositories.queries中猜测您只需在存储库中声明一个方法,其中方法名称告诉您的查询结构(同一站点上的示例 4.3 支持此猜测)。不确定是否可以生成动态查询,这是唯一一个快速搜索显示的查询。

于 2012-05-29T18:02:49.050 回答