我将通过搜索字符串和两个参数(项目和租户)在我的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"))
}
答案 0 :(得分:0)
Spring Data不会将注释中的查询与从方法名称派生的查询组合在一起。因此,如果您想要将搜索查询与从名称生成的内容进行组合,您必须自己完成并将其放入注释中。
答案 1 :(得分:0)
假设您在id
和Project
类中都有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);