【发布时间】:2013-04-29 18:03:55
【问题描述】:
好吧,我整个周末都在绞尽脑汁想办法解决这个问题,但我终于被难住了。我的reduce map函数:
function(doc) {
if(doc.primary_keys) {
for(pi in doc.primary_keys) {
var pk = doc.primary_keys[pi];
for(row_i in doc.data) {
var row = doc.data[row_i];
if(row[pk]) {
emit([row[pk]], doc._id);
}
}
}
}
}
我的观点减少了:
function(keys, values) {
var retval = {};
for(var val_i in values) {
var key = values[val_i];
if(key in retval) {
retval[key] += 1;
} else {
retval[key] = 1;
}
}
return(retval);
}
这是我的本地(Couchbase)CouchDB 返回的内容:
key value
["a"] {test2: 1, test: 1}
但这是 Cloudant 的回报:
key value
["a"] {[object Object]: 1, [object Object]: 1}
我怀疑一些 js env 差异,但每个解决方法都会导致我遇到相同的问题; Cloudant 的 values[val_i] 值是 Object 类型,我希望它是一个字符串。我不知道为什么。如果有帮助,我很愿意在这一点上重新减少。
为什么这些完全不同???
【问题讨论】:
-
虽然您所看到的有点奇怪(尽管它们都有共同的传统,但不再保证兼容性),但我会尝试 Cloudant 的支持选项。
-
你说得对 WiredPrairie、Couchbase 和 Couchdb 是 2 个不同的项目。
-
很好,谢谢大家。我是一个 js 初学者,只需要知道我不会发疯。我会在收到 Cloudant 支持后报告我的发现。
标签: javascript couchdb reduce cloudant