如何使用 java 客户端 v3 在 couchbase 中存储空值文档?

How to store null value document in couchbase with java client v3?

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

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

contentnull 时,它会保存一个 'null-value' 文档,在 couchbase 控制台中看起来像这样

我正在迁移到 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 它会创建一个空文档而不是 'null-value' 文档

为了向后兼容,是否可以使用客户端 v3 创建相同的 'null-value' 文档?

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

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

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