Spring Data MongoDB反应明显不起作用

时间:2018-05-22 17:44:05

标签: spring-data-mongodb

考虑以下依赖关系:

  • org.springframework.boot.spring-boot-starter-data-mongodb-reactive(2.0.2.RELEASE)

我有一个我需要检索不同值的集合。但是,当我使用查询方法检索Flux个不同的值时,它无法正常工作。我使用封闭式投影IdentifierOnly

定义了以下查询方法
@Repository
public interface FooBarRepository extends ReactiveCrudRepository<FooBar, String> {

    Flux<IdentifierOnly> findDistinctByFooAndBar(String foo, String bar);
}

文档/集合类:

@Document
public class FooBar {

    private String identifier; // not unique
    private String foo;
    private String bar;
    // extra fields

    // getters and setters
}

封闭式预测:

public interface IdentifierOnly {

    getIdentifier();
}

但是ReactiveMongoTemplate执行和记录的查询如下:find using query: { "foo" : "xxxx", "bar" : "yyyy" } fields: Document{{identifier=1}} for class: class org.example.models.FooBar in collection: fooBar并且不会以不同的方式返回任何结果,因为它包含重复项。

我做错了什么?如何根据特定查询检索不同的值(标识符)?

1 个答案:

答案 0 :(得分:2)

TL; DR

那还行不通。我提交了DATAMONGO-1985来调查我们如何整合不同的查询。

解释

MongoDB提供了一个独特的操作,只需要一个字段来检索不同的值。此操作可在Template API上使用,但不能通过存储库API获得。从存储库的角度来看,实际上没有可能指定应该用于不同操作的字段。

上面的代码形成了一个有趣的案例,它使用了导出不同查询所需的所有成分(不同的关键字,单个字段的封闭投影)。