CouchDB实现MapReduce的方式似乎与couchbase lite不同

CouchDB实现MapReduce的方式似乎与couchbase lite不同,couchdb,couchbase-lite,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":"countryMob

在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实现MapReduce是否与couchbase lite不同


我已经看到有人提到couchbase lite和CouchDB是100%兼容的,但情况似乎并非如此()。

大概您正在使用couchbase lite的REST API,可能是在PhoneGap或Cordova中。看起来该容器中的JavaScript解释器不支持
Object.keys
foreach()
。您可能需要重写映射,并仅使用JavaScript的旧功能减少函数


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

大概你正在使用Couchbase Lite的REST API,可能在PhoneGap或Cordova中。看起来该容器中的JavaScript解释器不支持
Object.keys
foreach()
。您可能需要重写映射,并仅使用JavaScript的旧功能减少函数


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

它们是兼容的,因为它们可以相互同步,但除此之外,它们是由两个实体开发的两个产品。它们使用不同的Javascript引擎等。它们的兼容性在于它们可以彼此同步,但除此之外,它们是由两个实体开发的两个产品。他们使用不同的Javascript引擎等等。谢谢你的回答。for(obj中的var key)循环也没有很好地工作,我能说的就是map/reduce实现与CouchDB相同,因此无论遇到什么,都与JS编程有关,这会阻止调用
emit
函数。您需要找到一种方法来调试map函数的内容,这样您就可以看到它做错了什么。也许可以将代码复制到你应用程序的其他地方,这样你可以更容易地调试它?Couchbase lite正在Android上运行。视图中有一个结果,行数组为空。是否仍有可能未调用emit?如果查询结果中没有任何行,并且您没有使用startkey/endkey/keys参数约束查询,则不会调用
emit
,是的。每次调用
emit
都会在视图索引中添加一行。谢谢。我从未考虑过行数组中没有结果意味着永远不会调用emit()函数。事后看来似乎很明显。然而,我仍然看不到(doc.obj中的var k){if doc.obj.hasOwnProperty(k){…}}不起作用的原因。代码在CouchDB上工作。这些文档肯定存在于Couchbase-lite中。谢谢您的回答。for(obj中的var key)循环也没有很好地工作,我能说的就是map/reduce实现与CouchDB相同,因此无论遇到什么,都与JS编程有关,这会阻止调用
emit
函数。您需要找到一种方法来调试map函数的内容,这样您就可以看到它做错了什么。也许可以将代码复制到你应用程序的其他地方,这样你可以更容易地调试它?Couchbase lite正在Android上运行。视图中有一个结果,行数组为空。是否仍有可能未调用emit?如果查询结果中没有任何行,并且您没有使用startkey/endkey/keys参数约束查询,则不会调用
emit
,是的。每次调用
emit
都会在视图索引中添加一行。谢谢。我从未考虑过行数组中没有结果意味着永远不会调用emit()函数。事后看来似乎很明显。然而,我仍然看不到(doc.obj中的var k){if doc.obj.hasOwnProperty(k){…}}不起作用的原因。代码在CouchDB上工作。这些文档肯定存在于Couchbase lite中。