如果数组字段的计数大于0,则CouchDB在索引中包含文档
我正在使用Cloudant,它只是CouchDB,具有更多的特性,我正在寻找计算数组中元素数量的语法。具体地说,我正在创建一个设计文档,其中我只在文档的“颜色”字段包含0个以上元素时为文档编制索引。如何检查“颜色”中的元素是否超过0个如果数组字段的计数大于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
{"_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);}}"
}
}
}