두 개의 문서가 트리 구조로되어 있고 다른 하나는 첫 번째 문서와 연결되어 있습니다. Im은 fk와 pk에 의해이 2 개의 doc`s에 가입하려고 노력하고 있습니다. 나는 실제 결과를 얻지 못하고 모든 null 값을 표시합니다.Couchdb는 키를 사용하여 두 개의 문서를 합칩니다.
먼저 문서
{
"name": "one",
"root": {
"level1" : {
"level2" : {
"level3" : {
"itemone": "Randomkey1",
"itemtwo": "Randomkey2
}
}
}
},
"type": "firstdoc"
}
세컨드 의사
I`ve는 레벨 1 또는 2 또는 3 소정 키를 모두 나열하는 맵 함수를 작성{
"name" : "two",
"mapBy" : "Randomkey1",
"type" : "senconddoc
}
. 이제이 첫 번째 의사 및 두 번째 의사가 키를 사용하여 가입하고 싶습니다. 필자는 두 가지 방법을 시도 (첫째 : 임 모든 (루트, Randomkey), (docName 같은, Randomkey1)을 받고 있지만 어떤 가입 할 나던 임 (루트, docName 같은) 사람이 고정에
도움을 수 같은 결과를 찾고.
function(doc) {
if (doc.type === 'firstdoc' || doc.type === 'seconddoc') {
var rootObj = doc.Root;
for (var level1 in rootObj) {
var level2Obj = doc.Root[level1];
for (var level2 in level2Obj) {
var keys = new Array();
var level3Obj = level2Obj[level2];
for (var i in level3Obj) {
var itemObj = level3Obj[i];
for (var i in itemObj) {
keys.push(itemObj[i]);
emit(doc.name, [itemObj[i], 0]);
var firstDocName = doc.name;
//This is gives null values
if (doc.Type === 'senconddoc' && doc.mapBy === itemObj[i]) {
emit(firstDocName , doc);
}
}
}
}
}
}
//This just lists keys to me
if (doc.type === 'senconddoc') {
emit([doc.mapBy, 1] , doc);
}
}
Daniel, 두 번째 대안이 어떻게 작동하는지 이해하려고합니다. 두 개의 뷰를 작성한 다음 쿼리 하나를 작성하고 응답을 사용하여 클라이언트의 다른 뷰에 쿼리를 맞 춥니 다? –
@AhmedFasih 아니요, 하나의보기를 사용하여 원하는 문서의 ID에 매핑되는 키를 반환 한 다음 해당 ID와 일치하는 all_docs 뷰 (시스템보기)에 대해 두 번째 쿼리를 실행합니다. 그러나 내가 소파에서 할 수 있으면 나는 조인으로부터 멀리 할 것이다 (더 이상 실제로 소파를 사용하지 않는다) – Daniel