【发布时间】:2014-12-20 05:29:08
【问题描述】:
假设我们有一个存储在 couchbase 中的文档:
{
"type": "Application",
"policies": [
"p1",
"p2"
],
"title": "app1",
"uuid": "03765cd7-4dcd-4ed0-9586-05acf2e845ad"
}
我创建了一个发出所有策略的视图:
function (doc, meta) {
if (doc.type && doc.type == "Application") {
for (var i in doc.policies) {
emit(doc.policies[i], doc.title);
}
}
}
为了测试这一点,我查询了 localhost:8092/default/_design/dev_DesignName/_view/ViewName?stale=false&inclusive_end=false&connection_timeout=60000&limit=10&skip=0 成功列出
{"total_rows":2,"rows":[
{"id":"03765cd7-4dcd-4ed0-9586-05acf2e845ad","key":"p1","value":"app1"},
{"id":"03765cd7-4dcd-4ed0-9586-05acf2e845ad","key":"p2","value":"app1"}
]}
到目前为止一切顺利。
问题:如何过滤结果,比如key=p1?
我尝试了各种查询后缀组合,包括:
...&key=p1...&key="p1"...&key={p1}...&key={"key":"p1"}
这些都不起作用 - 前三个是因为 JSON 语法错误,而最后一个只是导致空结果。我错过了什么?
额外问题:拥有这种配置,设置交集的最佳方法是什么,即
- 如果
application1有"policies" : ["p1", "p2"] - 和
application2有"policies" : ["p2", "p3"] - 和
application3有"policies" : ["p3", "p4"]
然后
- 如何从具有
p2或p3策略的应用程序中获取 uuid? - 如何从具有
p2和p3策略的应用程序中获取 uuid?
编辑:事实证明,通过 String 键查询可与 Java API 一起使用(带回正确的行)。知道我在 REST API 尝试中遗漏了什么仍然会很有趣。
【问题讨论】:
-
你试过 CB admin web 控制台视图执行吗?您可以在其中指定顺序和过滤条件(如开始键、结束键)。
标签: json couchbase data-retrieval