2016-05-13 30 views
0

是否可以在不指定文档ID的情况下将新文档插入Couchbase存储桶中?我想利用Couchbase的Java SDK创建一个文档,并有Couchbase确定具有类似于下面Groovy代码文档的UUID:创建Couchbase文档而不指定ID

import com.couchbase.client.java.CouchbaseCluster 
import com.couchbase.client.java.Cluster 
import com.couchbase.client.java.Bucket 
import com.couchbase.client.java.document.JsonDocument 

// Connect to localhost 
CouchbaseCluster myCluster = CouchbaseCluster.create() 

// Connect to a specific bucket 
Bucket myBucket = myCluster.openBucket("default") 

// Build the document 
JsonObject person = JsonObject.empty() 
    .put("firstname", "Stephen") 
    .put("lastname", "Curry") 
    .put("twitterHandle", "@StephenCurry30") 
    .put("title", "First Unanimous NBA MVP) 

// Create the document 
JsonDocument stored = myBucket.upsert(JsonDocument.create(person)); 

回答

1

没有,Couchbase文件必须有一个关键,这是一个键 - 整点毕竟价值存储。但是,如果您不在意密钥是什么,例如,因为您通过查询而不是密钥来检索文档,则可以在创建文档时使用uuid或任何其他唯一值。

+0

感谢您的反馈。为了澄清,我没有试图避免给文档分配一个ID。我只是试图看看是否有办法让Couchbase为我管理这些ID(类似于Elasticsearch默认自动为文档分配UUID的方式)。 – oyiadom

0

正如你已经发现,生成UUID是一种方法。

如果您想要生成更有意义的ID,例如前缀“foo”后跟序列号,则可以使用Couchbase中的原子计数器。

原子计数器是一个包含一个long的文档,SDK每次调用bucket.counter("counterKey", 1, 2)时都依靠它来保证唯一的递增值。此代码将采用计数器文档“counterKey”的值,以原子方式将其增加1并返回增加的值。如果计数器不存在,则使用初始值2(它是返回的值)创建该计数器。

这不是自动的,而是Couchbase创建序列/ ID的方式。

+0

谢谢@Simon。我可以将计数器并入我的应用程序。 – oyiadom

相关问题