我正在对 couchbase 文档进行如下部分更新:
...
MutateInBuilder builder = bucket.mutateIn(id);
for (Map.Entry<String, Object> entry : map.entrySet())
{
builder = builder.upsert(entry.getKey(), entry.getValue());
}
builder.execute();
...
当所有 upsert 调用中的所有值都属于同一类型时,一切正常。
但是,如果某些值是字符串,而其他值是 bool 值,我们就会得到异常:
com.couchbase.client.core.CouchbaseException: SUBDOC_INVALID_COMBO at com.couchbase.client.java.subdoc.SubdocHelper.commonSubdocErrors(SubdocHelper.java:100) at com.couchbase.client.java.subdoc.AsyncMutateInBuilder$2.call(AsyncMutateInBuilder.java:1094) at com.couchbase.client.java.subdoc.AsyncMutateInBuilder$2.call(AsyncMutateInBuilder.java:1052)
在 upsert 的测试用例中,找不到任何更新多个属性的用例。
我们如何在 Couchbase 中插入具有不同类型属性的文档?
编辑#1:
现在,事情变得更奇怪了......如果我在一次迭代中更新超过 16 个属性,我会得到同样的异常。
最佳答案
来自Couchbase Sub-Document API documentation (请参阅“限制”部分):
You may not combine more than 16 operations within a lookup-in or mutate-in command.
我猜您在混合值类型和单值类型这两种情况下都遇到了这种限制。
使用 Couchbase Java SDK 版本 2.3.7 验证。
关于javascript - Couchbase 部分更新未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069513/