查询 cloudant 中的子字段:

Querying the Subfields in cloudant:

我的数据库包含具有以下结构的文档:

{
  "_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" 和 "value" 的对象。任何帮助或线索将不胜感激。

您的选择器无法直接访问 metadata.name,因为 metadata 是一个数组。可能满足您的目标的几个选项:

1) 如果您已经为所有字段创建了全文索引并且您想要在任何字段中搜索 "par1",那么您的选择器(如下所示)应该可以工作。需要注意的是它 returns 文档其中 "par1" 是任何索引字段:

{
  "selector":
  {
    "$text": "par1"
  }
}

2) 如果您想专门搜索元数据 [i].name 字段包含 "par1" 的文档,那么您可以为以元数据 [i].name 值为键的文档创建一个视图,其中地图功能类似于:

function (doc) {
  if (doc.metadata) {
    for (i = 0; i < doc.metadata.length; i++) {
      emit(doc.metadata[i].name, doc._id);
    }
  }
}

然后您可以使用以下内容获取 'name' 为 'par1' 的所有文档(将花括号中的所有值替换为您的特定标识符):

curl -s https://{userid}:{password}@{userid}.cloudant.com/{db_name}/_design/{design_doc_name}/_view/{view_name}?key=%22par1%22&include_docs=true