我希望能够从视图中搜索发布的文档,在不属于其生成的字段上搜索,而是通过链接文档添加的字段。
如果这些是我的记录:
[
{ "_id": "11111" , "name": "pandora" },
{ "_id": "22222", "ancestors": ["11111"], "value": "hello" },
{ "_id": "33333", "ancestors": ["22222","11111"], "value": "world" }
]
并且观点是这样的:
function(doc) {
if (doc.value) {
emit([doc.value, 0], null);
if (doc.ancestors) {
for (var i in doc.ancestors) {
emit([doc.value, Number(i)+1], {_id: doc.ancestors[i]});
}
}
是否可以通过对'name'进行排序来搜索返回的文档?
答案 0 :(得分:0)
很遗憾,您无法搜索链接的文档。它们链接到发出的couchdb文档。 include_docs
参数只为您提取与_id对应的文档。视图按键排序,只能通过发出的键进行过滤。
构建couchdb视图时,将对从视图发出的键进行排序。在您的情况下,文档将在value
上排序,您只能使用key=some-value
过滤结果。但是,您可以发出复杂的json键,如{value:doc.value,name:doc.name}
,并查询名称和值。
与您的问题无关,但cloudant有一个沙发数据库lucene,可用于涵盖各种复杂的查询场景。
答案 1 :(得分:0)
我以双视图的方式做你的建议。
查看1 - 查找要获取文档的名称_id
您需要做的就是发出带有名字的文件。在emit函数中,您将发出名称作为键,将doc._id作为值。输出看起来像这样:
key: "pandora", value: [11111]
如果您有多个具有相同名称的ID,则可能需要减少此值。
查看2 - 创建每个文档所需的输出_id
第二种观点更复杂。您可以为每个文档发出一个值并存储“#”位置'通过使用具有空值的数组。这看起来像这样:
id 22222: key: 11111, value: ["hello"]
id 33333: key: 22222, value: ["world"]
id 33333: key: 11111, value: ["","world"]
假设每个键和数组位置最多只有一个已定义/非空的条目,您的reduce函数可以将其减少为:
key: 11111, value: ["hello","world"]
key: 22222, value: ["world"]
表现关注
您提到名称每15秒更新一次。您的文档看起来很小,因此每天大约6k更新对我来说不是问题。但是,您应该考虑以下事项: