这就是我目前的做法,是否有更好的(更高效或更简单)方式?
Cloudant
db中的文档:
1 ..
{
"_id": "someId",
"_rev": "someRev",
"title": "someTitle",
"parentDirectories": [
'/', '/base_dir'
]
}
2 ..
{
"_id": "someId2",
"_rev": "someRev",
"title": "someTitle2",
"parentDirectories": [
'/', '/base_dir'
]
}
目前,我在view
中定义了此Cloudant
并将include_docs
参数设置为true,以便返回整个对象(这是必需的)..
function (doc) {
if (doc.parentDirectories) {
for (i = 0; i < doc.parentDirectories.length; i++) {
emit(doc.parentDirectories[i], {_id: doc._id});
}
}
}
并使用..
调用view
/<database>/_design/<design-doc>/_view/my_view?include_docs=true
将keys
参数设置为:['/']
,以便视图返回上面的2个文档。
答案 0 :(得分:0)
你的解决方案很好。创建一个索引,其索引是数组中的键,这是检索包含已知值的文档的一种非常好的方法。一个小的迭代将作为值发出null
,因为您无论如何都在查询时检索整个文档(使用include_docs=true
):
function (doc) {
if (doc.parentDirectories) {
for (i = 0; i < doc.parentDirectories.length; i++) {
emit(doc.parentDirectories[i], null);
}
}
}
您还可以发出文档的子集:
function (doc) {
if (doc.parentDirectories) {
for (i = 0; i < doc.parentDirectories.length; i++) {
emit(doc.parentDirectories[i], doc.title);
}
}
}
意味着您可以避免使用include_docs = true,以获得更快的响应。