Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Couchbase与Cloudant CouchDB-reduce中与Javascript的差异_Javascript_Couchdb_Reduce_Cloudant - Fatal编程技术网

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

Couchbase与Cloudant CouchDB-reduce中与Javascript的差异,javascript,couchdb,reduce,cloudant,Javascript,Couchdb,Reduce,Cloudant,好吧,整个周末我都在绞尽脑汁想办法解决这个问题,最后我被难倒了。我的缩小映射函数: 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]

好吧,整个周末我都在绞尽脑汁想办法解决这个问题,最后我被难倒了。我的缩小映射函数:

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]是对象类型,在这里我需要一个字符串。我不知道为什么。如果有帮助的话,我很乐意在这一点上重新减少


为什么这些不同?

首先,您需要指定reduce函数在reduce情况下的工作方式(has info)。在Cloudant上,始终调用REREREDUCE(将各种碎片中的数据收集到最终视图结果中)。这就是为什么你会得到你所看到的回应

其次,看起来您正试图通过主键获取数据计数。一般来说,您希望使用内置的
\u sum
函数来实现这一点-它比自定义js代码快,而且
\u sum
可以在Cloudant中的对象上工作


第三,未还原视图将自动包含doc.\u id,因此发出一个1,以使
\u sum
工作。

首先,您需要指定reduce函数在reduce情况下的工作方式(has info)。在Cloudant上,始终调用REREREDUCE(将各种碎片中的数据收集到最终视图结果中)。这就是为什么你会得到你所看到的回应

其次,看起来您正试图通过主键获取数据计数。一般来说,您希望使用内置的
\u sum
函数来实现这一点-它比自定义js代码快,而且
\u sum
可以在Cloudant中的对象上工作


第三,未缩减的视图将自动包含doc.\u id,因此发出一个1,以使
\u sum
工作。

虽然您看到的有点奇怪(尽管它们都有一个共同的传统,但不再保证兼容性),但我还是会尝试Cloudant的支持选项。您是对的,Couchbase和Couchdb是两个不同的项目。亲爱的,谢谢你们。我是一个js初学者,只是想知道我没有发疯。当我得到Cloudant支持时,我会报告我的发现。虽然你看到的有点奇怪(虽然它们都有共同的传统,但不能保证兼容性),但我会尝试Cloudant的支持选项。你是对的WiredPairie、Couchbase和Couchdb是两个不同的项目。亲爱的,谢谢大家。我是一个js初学者,只是想知道我没有发疯。我将在获得Cloudant支持后报告我的发现。谢谢!是的,我试图发出一个值,作为一个值在每个文档中出现多少次的计数。所以字段值是发出的键,我用param?key=“foo”进行查询,我想得到每个文档中键“foo”的计数,即{document1:3,document2:5}。谢谢你提供关于切分的信息,太好了。现在完全有道理了,但让我完全困惑!酷,很高兴你现在拿到了:)谢谢!是的,我试图发出一个值,作为一个值在每个文档中出现多少次的计数。所以字段值是发出的键,我用param?key=“foo”进行查询,我想得到每个文档中键“foo”的计数,即{document1:3,document2:5}。谢谢你提供关于切分的信息,太好了。现在完全有道理了,但让我完全困惑!酷,很高兴你现在拿到了:)