gpt4 book ai didi

javascript - Couchbase 与 Cloudant CouchDB——reduce 中与 Javascript 的差异

转载 作者:行者123 更新时间:2023-11-28 16:03:52 25 4
gpt4 key购买 nike

好吧,整个周末我都在绞尽脑汁想办法解决这个问题,最后我被难住了。我的减少 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 的 value[val_i] 值是对象类型,我希望它是一个字符串。我不知道为什么。如果有帮助的话,我现在很愿意重新减少。

为什么这些不同???

最佳答案

首先,您需要指定您的reduce函数在rereduce情况下如何工作(http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views有信息)。在 Cloudant 上,始终会调用 rereduce(从各个分片收集数据到最终 View 结果中)。这就是为什么您会得到所看到的响应。

其次,您似乎正在尝试通过primary_key 获取数据计数。一般来说,您希望使用内置的 _sum 函数来实现此目的 - 它比自定义 js 代码更快,并且 _sum 可以处理 Cloudant 中的对象。

第三,未缩小的 View 将自动包含 doc._id,因此发出 1 来使 _sum 工作。

关于javascript - Couchbase 与 Cloudant CouchDB——reduce 中与 Javascript 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com