是否可以在不指定文档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));
答案 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的方式。