用于文档删除的 Couchbase 视图

Couchbase view for document deletion

我正在使用带有 spring 数据的 couchbase 服务器。同样对于 crud 操作,我使用 spring org.springframework.data.repository.CrudRepository。我想删除具有相同域名的用户文档。 domain 是 User pojo 的一个属性。我能够根据域属性值获取文档。

这是我的回购 class。

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() 函数使用了相同的视图。它给了我一个 error.Seems 这样的视图只适用于获取数据。如何删除同一域中的文档?谢谢

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)

您的视图需要为视图中的每个对象发出对象 ID。然后获取该 ID 数组,并针对每个 ID 对每个 ID 调用 delete。如果它适合您的用例,一个更好的方法是在要删除的每个对象上在现在和 X hours/days/whatever 之间设置一个随机 TTL,如果有很多要删除的话,应该减少集群的负载。然后 Couchbase 服务器将在它们以交错方式过期时删除它们。如果您需要尽快删除它们,那么显然可以对对象 ID 使用 delete 调用。