CouchDB实现MapReduce的方式似乎与couchbase lite不同
在couchDB上,我有以下观点: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
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中。