2

In couchbase, I was wondering if there was a way - WITHOUT using a view - to iterate through database keys. The admin interface appears to do this, but maybe its doing something special. What I'd like to is make a call like this to retrieve an array of keys:

$result = $cb->get("KEY_ALBERT", "KEY_FRED"); having the result be an array [KEY_ALEX, KEY_BOB, KEY_DOGBERT]

Again, I don't want to use a view unless there's no alternative. Doesn't look like its possible, but since the "view documents" in the admin appears to do this, I thought i'd double-check. I'm using the php interface if that matters.

4

3 回答 3

4

我不知道 couchbase admin 是如何工作的,但有两种选择。第一种选择是将您的文档存储为链表,一个文档具有指向另一个文档的属性(键)。

docs = [
  {
     id: "doc_C",
     data: "somedata",
     prev: "doc_B",
     next: "doc_D"
  },
  {
     id: "doc_D",
     data: "somedata",
     prev: "doc_C",
     next: "doc_E"
  }
]

第二种方法是使用顺序 ID。您应该有一个包含序列的文档,并在每次添加时递增它。它会是这样的:

docs = [
  {
     id: "doc_1",
     data: "somedata"
  },
  {
     id: "doc_2",
     data: "somedata"
  }    
  ...
]

通过这种方式,您可以执行“范围请求”。为此,您在服务器端形成键数组: [doc_1, doc_2 .... doc_N]并执行 multiget 查询。这也是另一个示例的链接

于 2013-06-08T08:13:02.050 回答
4

根据您的评论,唯一的方法是创建一个仅发出 id 作为键的 par 的简单视图:

function(doc, meta) {
  emit( meta.id );
}

使用此视图,您将能够使用所需的各种选项创建查询:- 分页、范围、...

注意:您谈论管理控制台,控制台使用类似于我上面写的(但未优化)的“内部视图”

于 2013-06-11T09:50:08.483 回答
0

couchbase PHP sdk 确实支持 multiget 请求。对于键列表,它将返回一个文档数组。

getMulti(array $ids, array $cas, int $flags) : array

http://www.couchbase.com/autodocs/couchbase-php-client-1.1.5/classes/Couchbase.html#method_getMulti

于 2015-01-20T20:51:37.283 回答