2017-02-11 57 views
0

我将通过搜索字符串和两个参数(项目和租户)在我的mongoDB数据库中搜索workingBook文档。 有没有可能做到这一点? 这是我目前春数据查询,但它不工作:春季数据 - 按搜索字符串和两个参数搜索文档

@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")) 
} 

回答

0

假设您在ProjectTenant类别中都有id字段,如下所示。

@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); 
0

春天的数据不会将查询从一个注释与来自法生成的查询合并名称。因此,如果您想将搜索查询与名称生成的内容组合在一起,您必须自己完成,并将其放入注释中。

+0

而如何做到这一点在我的情况,我不清楚如何实现,用@Query注释还是...?非常感谢! – quma