如果数组字段的计数大于 0,CouchDB 将文档包含在索引中

CouchDB include document in index if count of array field is greater than 0

我正在使用 Cloudant,它只是具有更多功能的 CouchDB,我正在寻找用于计算数组中元素数量的语法。具体来说,我正在创建一个设计文档,如果它的字段 'color' 有超过 0 个元素,我只索引文档。如何检查 'color' 中是否有超过 0 个元素?

{"_id": "_design/geodd",
 "_rev": "5-2729b1453b11f81261ddb3cf3f3de72f",
 "st_indexes": {
  "geoidx": {
   "index": "function(doc) {if (doc.geometry && doc.geometry.coordinates && doc.color != []) {st_index(doc.geometry);}}"
  }
 }
}

编写视图时,您可以执行任何 Javascript 代码,因此这更像是一个 javascript 问题,而不是 CouchDB 问题。

您认为的错误是您不能将 javascript 中的数组与相等运算符进行比较:doc.color != [] 将始终 return false(因为它们不是相同的对象)。

如果您事先知道 doc.color 始终是一个数组,请尝试将其替换为 doc.color.length == 0

如果您不确定 doc.color 是数组,请写 isArray(doc.color) && doc.color.length == 0

您的视图代码将变为:

{"_id": "_design/geodd",
 "_rev": "5-2729b1453b11f81261ddb3cf3f3de72f",
 "st_indexes": {
  "geoidx": {
   "index": "function(doc) {if (doc.geometry && doc.geometry.coordinates && isArray(doc.color) && doc.color.length == 0) {st_index(doc.geometry);}}"
  }
 }
}