【问题标题】:How to store null value document in couchbase with java client v3?如何使用 java 客户端 v3 在 couchbase 中存储空值文档?
【发布时间】:2021-07-30 17:58:15
【问题描述】:

我有一个 java couchbase 客户端 v2,可以将文档保存到数据库中

JsonObject content = ...
JsonDocument newDocument = JsonDocument.create(key, expiration, content);
bucket.upsert(newDocument);

contentnull 时,它会保存一个“空值”文档,在沙发底座控制台中看起来像这样

我正在迁移到 couchbase java 客户端 v3 并以下一步的方式保存文档

JsonObject content = ...
var upsertOptions = UpsertOptions.upsertOptions();
if (expiration != null) {
    upsertOptions.expiry(expiration);
}
bucket.defaultCollection().upsert(key, content, upsertOptions);

JsonDocument 在 v3 中不可用,我直接输入JsonObject,当content 不是null 时它可以正常工作。

当我将content 设置为null 时,就像之前的情况一样,它会引发异常com.couchbase.client.core.error.InvalidArgumentException。如果我尝试使用 JsonObject.create() 而不是 null 它会创建一个空文档而不是“空值”文档

为了向后兼容,是否可以使用客户端 v3 创建相同的“空值”文档?

【问题讨论】:

    标签: java couchbase couchbase-java-api couchbase-java-client


    【解决方案1】:

    使用 Couchbase Java SDK 3.x,这是存储根为 null 的 JSON 文档的一种方法:

    collection.upsert(key, "null", UpsertOptions.upsertOptions()
        .transcoder(RawJsonTranscoder.INSTANCE));
    

    它使用RawJsonTranscoder 将内容解释为预序列化的 JSON。

    【讨论】:

    • 这并不明显,但它有效!感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多