查找文档数组 CouchDB

Finding Documents Array 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。

我有一个类似的地图函数,但这只显示 Cam_Name LxSV Double 和 Customer Mike。我想显示迈克正在使用的所有 Cam_Names。

我的查询:

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

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

如果您的查询看起来完全那样,那么您有语法错误。而且,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"
    }
  ]
}

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