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

如果数组字段的计数大于0,则CouchDB在索引中包含文档,couchdb,cloudant,database,nosql,Couchdb,Cloudant,Database,Nosql,我正在使用Cloudant,它只是CouchDB,具有更多的特性,我正在寻找计算数组中元素数量的语法。具体地说,我正在创建一个设计文档,其中我只在文档的“颜色”字段包含0个以上元素时为文档编制索引。如何检查“颜色”中的元素是否超过0个 {"_id": "_design/geodd", "_rev": "5-2729b1453b11f81261ddb3cf3f3de72f", "st_indexes": { "geoidx": { "index": "function(doc) {i

我正在使用Cloudant,它只是CouchDB,具有更多的特性,我正在寻找计算数组中元素数量的语法。具体地说,我正在创建一个设计文档,其中我只在文档的“颜色”字段包含0个以上元素时为文档编制索引。如何检查“颜色”中的元素是否超过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代码,因此这与其说是CouchDB问题,不如说是Javascript问题

视图中的错误是无法将javascript中的数组与相等运算符进行比较:
doc.color!=[]
将始终返回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);}}"
  }
 }
}