使用QueryDSL使用Spring Data MongoDB查询DBRef

时间:2017-05-31 00:48:39

标签: mongodb spring-data spring-data-mongodb querydsl

我使用Spring Data MongoDB和QueryDSL来执行一些简单的查询,但是我在尝试将谓词与DBRef对象的字段一起使用时遇到了问题。

似乎DBRef未解析,因此查询始终返回空结果。从2014年开始大概有一些关于这个主题的问题,虽然在QueryDSL和Spring Data方面似乎已经做了一些工作,但我仍然无法使它工作并且没有找到任何有用的例子。

我正在寻找一个简单的解决方案,如下面的简化测试案例:

@Document
class Foo {
    @Id Integer id;
    @DBref Bar bar;
}

@Document
class Bar {
    @Id Integer id;
    String name;
}

interface FooRepository extends MongoRepository<Foo, Integer>, QueryDslPredicateExecutor<Foo> { ... }

以及我尝试使用的查询:

fooRepository.findAll(QFoo.foo.bar.name.eq("test"))

我使用QueryDSL 4.1.4,Spring Boot 1.5.3和Spring Data MongoDB 1.10.3

支持吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

TL; DR;

不支持。

说明

您正在表达一个谓词,该谓词遵循不同文档的引用。

MongoDB是一个面向文档的数据库,它不知道连接。每个文档可能包含子文档或引用(这些都是人为的)。此外,每个文档必须单独查找或作为基于查询的文档集合提取。

由于MongoDB没有内置连接,因此您无法查询[WebMethod(EnableSession = true)] [ScriptMethod(UseHttpGet = false)] public long Method_2(string paramString) { ParameterClass pClass = (new JavaScriptSerializer()).Deserialize<ParameterClass>(paramString); //Do Something. return 0; } 个引用。您可以表示在嵌入子文档时扫描子文档的查询。

Spring Data MongoDB以更加用户友好的方式公开MongoDB提供的功能,并且不会假装提供MongoDB不支持的功能。

自MongoDB 3.4以来,聚合框架支持DBRef让MongoDB在聚合阶段查找以查找单个文档。查找很昂贵,这是你宁愿避免的。