在不指定ID的情况下创建Couchbase文档

时间:2016-05-13 20:10:21

标签: groovy couchbase

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

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));

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

似乎没有办法让Couchbase为我生成文档ID。在另一位开发人员的建议下,我使用<!--?php <br ?-->/** * Download the library from: https://github.com/twilio/twilio-php * Copy the 'Services' folder into a directory containing this file. */ require('Services/Twilio.php'); $account_sid = "ACXXXXXXXXX"; // Your Twilio account sid $auth_token = "YYYYYYYYYYYY"; // Your Twilio auth token // Download data from Twilio API $client = new Services_Twilio($account_sid, $auth_token); $messages = $client->account->sms_messages->getIterator(0, 50, array( 'DateSent>' => '2012-09-01', 'DateSent<' => '2012-09-30', //'From' => '+17075551234', // **Optional** filter by 'From'... //'To' => '+18085559876', // ...or by 'To' )); // Browser magic $filename = $account_sid."_sms.csv"; header("Content-Type: application/csv") ; header("Content-Disposition: attachment; filename={$filename}"); // Write headers $fields = array( 'SMS Message SID', 'From', 'To', 'Date Sent', 'Status', 'Direction', 'Price', 'Body' ); echo '"'.implode('","', $fields).'"'."\n"; // Write rows foreach ($messages as $sms) { $row = array( $sms->sid, $sms->from, $sms->to, $sms->date_sent, $sms->status, $sms->direction, $sms->price, $sms->body ); echo '"'.implode('","', $row).'"'."\n"; } 在我的应用程序中生成文档ID。到目前为止,这种方法对我来说效果很好。

参考:https://forums.couchbase.com/t/create-a-couchbase-document-without-specifying-an-id/8243/4

答案 2 :(得分:0)

正如您已经发现的那样,生成UUID是一种方法。

如果您想生成更有意义的ID,例如&#34; foo&#34;前缀后跟一个序列号,你可以在Couchbase中使用原子计数器。

原子计数器是一个包含long的文档,每次调用bucket.counter("counterKey", 1, 2)时,SDK都会依赖该文档来保证唯一的递增值。此代码将获取计数器文档&#34; counterKey&#34;的值,将其原子递增1并返回递增的值。如果计数器不存在,则使用初始值2创建它,这是返回的值。

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