在couchbase java sdk我试图改变数据库中的布尔字段。
我想做的是:
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)
));
return result.contentAs(0, Boolean.class);
}
这个操作改变了数据库中的字段,但是没有返回操作的结果。我应该做一个额外的配置吗?
com.couchbase.client.core.error.InvalidArgumentException: Index 0 is invalid
at com.couchbase.client.core.error.InvalidArgumentException.fromMessage(InvalidArgumentException.java:28) ~[core-io-2.3.0.jar:na]
at com.couchbase.client.java.kv.MutateInResult.getFieldAtIndex(MutateInResult.java:118) ~[java-client-3.3.0.jar:na]
at com.couchbase.client.java.kv.MutateInResult.contentAs(MutateInResult.java:91) ~[java-client-3.3.0.jar:na]
at com.couchbase.client.java.kv.MutateInResult.contentAs(MutateInResult.java:68) ~[java-client-3.3.0.jar:na]
at com.company.caseuploadapi.service.couchbase.CaseRepositoryImpl.changeDataFetchOrder(CaseRepositoryImpl.java:179) ~[classes/:na]
at com.company.caseuploadapi.service.cases.defaults.CaseService.setDataFetchOrder(CaseService.java:371) ~[classes/:na]
at com.company.caseuploadapi.controller.CaseController.setDataFetchOrder(CaseController.java:79) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
"}
感谢@Graham Pole,这个问题在Couchbase论坛上得到了回答。我引用:
是的,大多数mutateIn操作不会返回它们所写的内容。这是因为你通常知道它是什么-例如,你有isRandom在这里-并且它节省了网络上的字节。
例外是计数器:如果你增加或减少一个计数器,它会返回所写的内容,否则就不会返回信息。
见这里的讨论