我有一个Couchbase-Document“Group”,其中包含一个group-members-names列表。我想查询一个人的所有组。我设法用N1QL ARRAY_CONTAINS做 - 在代码示例中看到 - 但我希望我可以从方法名称生成查询,就像在Spring Data中一样。
任何帮助表示赞赏:)
public List<MyGroup> findAllByMembers(String member);
和public List<MyGroup> findByMembers(String member);
但他们只返回一个空列表 - 我猜他们试图匹配整个“成员”值并且不认为它是一个列表 - 没有错误。
带有List字段的My Document
@Data
@Document
public class MyGroup {
private String name;
private List<String> members = new ArrayList<>();
}
我的存储库
@RepositoryDefinition(domainClass = MyGroup.class, idClass = String.class)
public interface MyGroupRepository extends CouchbaseRepository<MyGroup, String> {
//@Query("#{#n1ql.selectEntity} WHERE ARRAY_CONTAINS(members,$1) AND #{#n1ql.filter}")
public List<MyGroup> findAllByMembers(String member);
}
在成员中给出带有“member1”的“group1”。 repository.findAllByMembers( “的member1”);应该返回[“group1”]。
Couchbase受Spring Data规范的限制。不幸的是,我们不能简单地向它添加新的行为(如果切换到关系数据库,它必须没有断点)。因此,每当您需要查询具有N1QL特定函数/关键字的内容时,您必须通过@Query编写查询