如果文档包含数组 属性 中的值,则从 cloudant db 检索文档
Retrieve documents from cloudant db if they contain a value in an array property
这就是我目前的做法,有没有更好(性能更高或更简单)的方法?
Cloudant
数据库中的文档:
1 ..
{
"_id": "someId",
"_rev": "someRev",
"title": "someTitle",
"parentDirectories": [
'/', '/base_dir'
]
}
2 ..
{
"_id": "someId2",
"_rev": "someRev",
"title": "someTitle2",
"parentDirectories": [
'/', '/base_dir'
]
}
目前,我在 Cloudant
中定义了这个 view
并将 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
参数设置为:['/']
,因此查看 returns 以上 2 个文档。
你的解决方案很好。创建一个索引,其键是数组中的键是检索包含已知值的文档的完美方法。一个小的迭代是发出 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,以获得更快的响应。
这就是我目前的做法,有没有更好(性能更高或更简单)的方法?
Cloudant
数据库中的文档:
1 ..
{
"_id": "someId",
"_rev": "someRev",
"title": "someTitle",
"parentDirectories": [
'/', '/base_dir'
]
}
2 ..
{
"_id": "someId2",
"_rev": "someRev",
"title": "someTitle2",
"parentDirectories": [
'/', '/base_dir'
]
}
目前,我在 Cloudant
中定义了这个 view
并将 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
参数设置为:['/']
,因此查看 returns 以上 2 个文档。
你的解决方案很好。创建一个索引,其键是数组中的键是检索包含已知值的文档的完美方法。一个小的迭代是发出 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,以获得更快的响应。