簡體   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