javascript - Couchbase 部分更新未按预期工作

标签 javascript couchbase partial upsert java-client

我正在对 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/

相关文章:

json - 如何通过命令行或手动将 json 文件数据加载到现有 couchbase 存储桶?

javascript - 如何在 angularjs 中从 $http.get 获取 id

javascript - 部分全景(iPhone 全景)、 Three.js 还是 Pannellum?

javascript - Node 部分搜索

javascript - 为什么 javascript 会渲染移除的组件

javascript - 仅对所有 iPhone 和 IPADS 进行样式设置的 CSS 样式

javascript - 带选项的 Stripe 自定义结帐

android - Couchbase facebook 拉验证器

arrays - Couchbase:在包含对象数组的数组上创建索引

javascript - 用于为 Google 跟踪代码管理器拉取元素类内部 html 的脚本