私はCouchbaseServerで遊んでいて、ローカルデータベースをCloudantに複製しようとしましたが、関連するプロジェクトで一意のタグのセットを構築するために、map/reduce関数のペアで競合する結果が得られています...
// map.js
function(doc) {
if (doc.tags) {
for(var t in doc.tags) {
emit(doc.tags[t], doc._id);
}
}
}
// reduce.js
function(key,values,rereduce) {
if (!rereduce) {
var res=[];
for(var v in values) {
res.push(values[v]);
}
return res;
} else {
return values.length;
}
}
Cloudbaseサーバーでは、これは次のようなJSONを返します。
{"rows":[
{"key":"3d","value":["project1","project3","project8","project10"]},
{"key":"agents","value":["project2"]},
{"key":"fabrication","value":["project3","project5"]}
]}
それはまさに私が望んでいたことであり、期待していたことです。ただし、Cloudantレプリカに対する同じクエリは、次のように返します。
{"rows":[
{"key":"3d","value":4},
{"key":"agents","value":1},
{"key":"fabrication","value":2}
]}
したがって、どういうわけか、値の配列の長さのみが返されます...非常に混乱し、一部のM&R忍者による洞察に感謝しています...;)