Couchbase Java SDK MutateInResult返回Index 0 is invalid错误
问题根因
这个报错和额外配置无关,是Couchbase Java SDK子文档操作的默认机制导致的:
默认调用upsert这类MutateIn子操作时,服务端不会返回修改后的字段值,因此返回的MutateInResult对象中子操作结果列表长度为0,直接访问索引0的内容就会抛出Index 0 is invalid异常。
修复方案
两种可选实现方式:
- 如果确实需要从返回结果中取修改后的值,在对应的子操作spec上开启
returnContent配置,告知服务端返回该子操作的执行结果:
public boolean changeDataFetchOrder(String caseId, String taskId, boolean isRandom) { var searchId = "case" + ":" + caseId + ":" + taskId; Collection collection = bucket.defaultCollection(); var result = collection.mutateIn(searchId, Collections.singletonList( upsert("isDataFetchOrderRandom", isRandom) .returnContent(true) // 开启子操作结果返回 )); return result.contentAs(0, Boolean.class); }
- 如果只是需要确认操作成功、不需要拿到服务端存储的最终值,直接返回入参
isRandom即可:mutateIn方法没有抛出异常就代表字段已经成功写入数据库,不需要额外从结果对象中取值,这种方式还能减少网络传输开销。
注:
returnContent配置在Couchbase Java SDK 3.2+版本已支持,你当前使用的3.3.0版本完全兼容,不需要升级依赖。
内容的提问来源于stack exchange,提问作者erondem
相关产品推荐
相关产品推荐

