Spring数据 - 按搜索字符串和两个参数搜索文档

时间:2017-02-11 17:26:50

标签: mongodb spring-data

我将通过搜索字符串和两个参数(项目和租户)在我的mongoDB数据库中搜索workingBook文档。 有可能这样做吗? 这是我当前的Spring数据查询,但它不起作用:

@Query("{$text : { $search : ?0 } }")
List<WorkingBook> findWorkingBookByProjectAndTenantAndSearchString(final Project project, final Tenant tenant,
        final String searchString);

这是一份示例文件:

db.WorkingBook.find().pretty()
{
"_id" : ObjectId("589f2af42f7a97b95842afc6"),
"_class" : "my.domain.dao.domain.WorkingBook",
"dateTimeFrom" : ISODate("2017-02-11T15:16:33Z"),
"dateTimeUntil" : ISODate("2017-02-11T16:17:33Z"),
"categoryType" : "SERVICE",
"workingText" : "That's a working book text ",
"creationDateTime" : ISODate("2017-02-11T15:17:08.550Z"),
"user" : DBRef("User", ObjectId("5589929b887dc1fdb501cdba")),
"project" : DBRef("Project", ObjectId("5899eb0dbfb41f1382eac15a")),
"tenant" : DBRef("Tenant", ObjectId("58500aed747a6cddb55ba094"))
}

2 个答案:

答案 0 :(得分:0)

Spring Data不会将注释中的查询与从方法名称派生的查询组合在一起。因此,如果您想要将搜索查询与从名称生成的内容进行组合,您必须自己完成并将其放入注释中。

答案 1 :(得分:0)

假设您在idProject类中都有Tenant字段,如下所示。

@Id
private String id;

DBRef如下WorkingBook

@DBRef
private Project project;

@DBRef
private Tenant tenant;

使用@Query注释

将项目和租户ID与搜索字符串一起传递。

@Query("{$text : { $search : ?0 }, 'project' : ?1, 'tenant' : ?2 }")
List<WorkingBook> findWorkingBookByProjectAndTenantAndSearchString(final String searchString, final String projectId, final String tenantId);

没有@Query注释

您可以在存储库中定义以下方法。

List<WorkingBook> findByProjectAndTenant(final TextCriteria searchString, final String projectId, final String tenantId);

致电代码

TextCriteria  textCriteria = new TextCriteria().matching(searchString);
List<WorkingBook> workingBookList = workingBookRepository.findByProjectAndTenant(textCriteria, projectId, tenantId);