在couchbase中,我想知道是否有办法 - 没有使用视图 - 迭代数据库密钥。管理界面似乎这样做,但也许它做了一些特别的事情。我想要的是像这样调用来检索一组键:
$ result = $ cb-> get(“KEY_ALBERT”,“KEY_FRED”); 结果是一个数组[KEY_ALEX,KEY_BOB,KEY_DOGBERT]
同样,除非别无选择,否则我不想使用视图。看起来不太可能,但由于管理员中的“查看文档”似乎是这样做的,我想我会仔细检查。如果重要,我正在使用php界面。
答案 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