2016-05-13 33 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

相關問題