CouchDB似乎以不同于couchbase-lite的方式实现了MapReduce

时间:2016-05-24 15:33:01

标签: couchdb couchbase-lite

在couchDB上,我有以下观点:

function(doc) {
  if(doc._id === 'countryMobileNumberCodes') {
    Object.keys(doc.dictionary).forEach(function(k, i) {
      emit(k, doc.dictionary[k]);
    });
  }
}

这会产生以下结果:

{"total_rows":2,"offset":0,"rows":[
{"id":"countryMobileNumberCodes","key":"1","value":"+265"},
{"id":"countryMobileNumberCodes","key":"2","value":"+27"}
]}

Android上的相同视图(使用couchbase-lite-android 1.2.1)不会发出任何行。但是,如果我要将视图更改为:

function(doc) {
  if(doc._id === 'countryMobileNumberCodes') {
    emit(doc._id, doc.dictionary);
  }
}

然后我从couchbase-lite获得结果(所以文档肯定存在于移动设备上)。

CouchDB是否以与couchbase-lite不同的方式实现了MapReduce?

我已经看到了couchbase-lite和CouchDB 100%兼容的事实,但情况似乎并非如此(Couchbase-lite and CouchDB)。

1 个答案:

答案 0 :(得分:0)

据推测,您使用的是Couchbase Lite的REST API,可能是在PhoneGap或Cordova中。看起来该容器中的JavaScript解释器不支持Object.keysforeach()。您可能需要使用旧的JavaScript功能重写地图并减少功能。

(我的JS非常生疏,所以我无法告诉你这些API添加了哪种语言版本。它们也可能不是内置的,而是CouchDB在其JS上下文中包含的库的一部分便利性。)