我正在使用带有弹簧数据的couchbase服务器。同样对于crud操作我使用spring org.springframework.data.repository.CrudRepository
。我想删除具有相同域名的用户文档。 domain是User pojo的一个属性。我能够根据域属性值获取文档。
这是我的回购课程。
public interface UserRepository extends CrudRepository<User, String>{
List<User> findByDomain(Query query);
void deleteByDomain(Query query);
}
另外,findByDomain的视图是,
function (doc, meta) {
if (doc._class == "com.link.pojo.User") {
emit(doc.domain, null);
}
}
这适用于获取相同域名的所有文档。所以我对deleteByDomain()函数使用了相同的视图。它给了我一个错误。像这样的视图只适用于获取数据。如何删除同一域中的文档?感谢。
org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.util.ArrayList<?> to type void for value '[com.link.pojo.User@21dfd606, com.link.pojo.User@6e5c3549, com.link.pojo.User@67ae8439, com.link.pojo.User@726aef5c]';
nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.util.ArrayList<?> to type void
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:176)
at org.springframework.data.repository.core.support.QueryExecutionResultHandler.postProcessInvocationResult(QueryExecutionResultHandler.java:75)
答案 0 :(得分:2)
您的视图需要为视图中的每个对象发出对象ID。然后获取该ID数组,并为每个ID调用每个ID上的删除。如果它适合您的用例,更好的方法,如果有很多要删除的话,应该减少群集上的负载是在现在和X小时/天之间设置一个随机TTL /每个要删除的对象。然后Couchbase服务器将以交错的方式删除它们。如果您需要尽快删除它们,那么显然可以在对象ID上使用删除调用。