查找文档数组CouchDB

时间:2015-03-20 15:03:06

标签: arrays find couchdb

我有他们有这种结构的文件:

{id: ####,
rev: ####,
"Cam_name": "Camera SX",
"colour": "white",
"manufacturer": "Sony",
"rec_limit": 180,
"Customer": ["Mike","Ann","James"]
}

{id: ####,
rev: ####,
"Cam_name": "PXSV CAM",
"colour": "white",
"manufacturer": "LG",
"rec_limit": 144,
"Customer": ["Mike","Oliver","Mr. Rain"]
}

{id: ####,
rev: ####,
"Cam_name": "LxSV Double",
"colour": "white",
"manufacturer": "Phillips",
"rec_limit": 160,
"Customer": ["Mike"]
}

我想创建一个MAP函数查询,在那里我可以看到客户Mike正在使用的所有Cam_Names。

我有一个simillar Map Function但这只显示了Cam_Name LxSV Double和只有Customer Mike。我想要显示迈克正在使用的所有Cam_Names。

MyQuery:

function(doc){
if(doc.Customer == "Mike"){
emit(doc.Cam_name, doc.Customer)

这个查询给了我不正确的结果。

1 个答案:

答案 0 :(得分:2)

如果您的查询看起来像那样,则会出现语法错误。但是,doc.Customer是一个数组,因此您无法进行简单的相等检查。

但是检查数组中是否存在值是完全没必要的,你的map函数可以看起来像这样:

function (doc) {
  doc.Customer.forEach(function (customer) {
    emit(customer, doc.Cam_name);
  });
}

然后,使用/{db}/_design/{ddoc}/_view/{view}?key="Mike"

查询您的观看次数

您的输出将如下所示:

{
  "total_rows": 3,
  "offset": 0,
  "rows": [
    {
      "id": "####",
      "key": "Mike",
      "value": "Camera SX"
    },
    {
      "id": "####",
      "key": "Mike",
      "value": "PXSV CAM"
    },
    {
      "id": "####",
      "key": "Mike",
      "value": "LxSV Double"
    }
  ]
}

现在,您可以使用相同的视图查找任何客户,而不仅仅是您在地图功能中指定的任何客户。