使用 QueryDSL 使用 Spring 数据 MongoDB 查询 DBRef
Query DBRef with Spring Data MongoDB using QueryDSL
我正在使用 Spring Data MongoDB 和 QueryDSL 来执行一些简单的查询,但是我在尝试将谓词与 DBRef 对象的字段一起使用时遇到了问题。
好像DBRef没有解析,所以查询总是returns空结果。主要是从 2014 年开始有一些关于这个主题的问题,尽管在 QueryDSL 和 Spring 数据方面似乎已经完成了一些工作,但我仍然无法使其工作并且没有找到任何工作示例.
我正在寻找一个简单的解决方案,如以下简化的测试用例:
@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 with Spring Data MongoDB 1.10.3
支持吗?我错过了什么吗?
TL;DR;
不支持。
说明
您正在表达跟在不同文档中的引用的谓词。
MongoDB 是一个面向文档的数据库,不知道连接。每个文档都可能包含子文档或引用(这是人为的)。此外,每个文档都必须单独查找或作为基于查询的文档集合来获取。
因为 MongoDB 没有内置连接,所以您无法跨 DBRef
个引用进行查询。当子文档被嵌入时,您可以表达一个扫描子文档的查询。
Spring 数据 MongoDB 以更加用户友好的方式公开 MongoDB 提供的功能,并且不会假装提供 MongoDB 不支持的功能。
从MongoDB 3.4开始,聚合框架支持$graphLookup
让MongoDB在聚合阶段查找单个文档。查找的成本很高,这是您希望避免的事情。
我正在使用 Spring Data MongoDB 和 QueryDSL 来执行一些简单的查询,但是我在尝试将谓词与 DBRef 对象的字段一起使用时遇到了问题。
好像DBRef没有解析,所以查询总是returns空结果。主要是从 2014 年开始有一些关于这个主题的问题,尽管在 QueryDSL 和 Spring 数据方面似乎已经完成了一些工作,但我仍然无法使其工作并且没有找到任何工作示例.
我正在寻找一个简单的解决方案,如以下简化的测试用例:
@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 with Spring Data MongoDB 1.10.3
支持吗?我错过了什么吗?
TL;DR;
不支持。
说明
您正在表达跟在不同文档中的引用的谓词。
MongoDB 是一个面向文档的数据库,不知道连接。每个文档都可能包含子文档或引用(这是人为的)。此外,每个文档都必须单独查找或作为基于查询的文档集合来获取。
因为 MongoDB 没有内置连接,所以您无法跨 DBRef
个引用进行查询。当子文档被嵌入时,您可以表达一个扫描子文档的查询。
Spring 数据 MongoDB 以更加用户友好的方式公开 MongoDB 提供的功能,并且不会假装提供 MongoDB 不支持的功能。
从MongoDB 3.4开始,聚合框架支持$graphLookup
让MongoDB在聚合阶段查找单个文档。查找的成本很高,这是您希望避免的事情。