繁体   English   中英

使用Java中的QueryDSL和MongoDB创建复杂查询

[英]Creating a complex query using QueryDSL and MongoDB in Java

我按照本教程设置了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。 有没有办法通过存储库实现这一点,如果没有,它们是无用的吗?

它应该是可能的。 也许这样的事情

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM