通过没有视图的couchbase键迭代

时间:2013-06-08 05:00:14

标签: couchbase

在couchbase中,我想知道是否有办法 - 没有使用视图 - 迭代数据库密钥。管理界面似乎这样做,但也许它做了一些特别的事情。我想要的是像这样调用来检索一组键:

$ result = $ cb-> get(“KEY_ALBERT”,“KEY_FRED”); 结果是一个数组[KEY_ALEX,KEY_BOB,KEY_DOGBERT]

同样,除非别无选择,否则我不想使用视图。看起来不太可能,但由于管理员中的“查看文档”似乎是这样做的,我想我会仔细检查。如果重要,我正在使用php界面。

3 个答案:

答案 0 :(得分:4)

我不知道couchbase管理员的工作原理,但有两种选择。第一个选项是将您的文档存储为链接列表,一个文档具有指向另一个文档的属性(键)。

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查询。这也是link to another example

答案 1 :(得分:4)

根据您的评论,唯一的方法是创建一个简单的视图,只发出id作为密钥的标准:

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

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

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

答案 2 :(得分:0)

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

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

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