我的数据库包含具有以下结构的文档:
{
"_id": "xx",
"_rev": "xx",
"metadata": [
{
"name": "par1",
"value": "val1"
},
{
"name": "par2",
"value": "val2"
},
{
"name": "par3",
"value": "val3"
},
{
"name": "par4",
"value": "val4"
}
]
}
我想运行一些类似的查询:
{
"selector":
{
"metadata.name":"par1"
}
}
但目前我上面的选择器不起作用。 我为所有字段创建了一个文本类型索引。基本上我想对子字段进行查询,其中子字段本身是一个包含2个数据成员的对象" name"和"价值"。任何帮助或线索将不胜感激。
答案 0 :(得分:2)
您的选择器无法直接访问metadata.name
,因为metadata
是一个数组。一些可能满足您目标的选项:
1)如果您为所有字段创建了全文索引,并且想要搜索" par1"在任何领域,那么你的选择器就像下面的选择器一样。需要注意的是,它会返回文档,其中" par1"是任何索引字段:
{
"selector":
{
"$text": "par1"
}
}
2)如果要专门搜索元数据[i] .name字段包含" par1"的文档,则可以为元数据[i] .name值上的文档创建视图map函数看起来像:
function (doc) {
if (doc.metadata) {
for (i = 0; i < doc.metadata.length; i++) {
emit(doc.metadata[i].name, doc._id);
}
}
}
然后,您可以获取所有名称&#39;是&#39; par1&#39;使用以下内容(用您的特定标识符替换花括号中的所有值):
curl -s https://{userid}:{password}@{userid}.cloudant.com/{db_name}/_design/{design_doc_name}/_view/{view_name}?key=%22par1%22&include_docs=true