2011-03-17 5 views
2

네트워크 레이아웃을 Couch DB에 저장하려하지만 내 솔루션은 다소 무작위로 그래프를 제공합니다. 나는 문서와 노드를 저장 :그래프 모양의 구조를 Couch DB에 저장하거나 직접 include_docs 수행

function(doc) { 
    if(doc.type == 'connection') { 

     if (doc.source_id) 
     emit("source", {'_id': doc.source_id}); 
     if(doc.target_id) 
     emit("target", {'_id': doc.target_id}); 
    } 

} 
: 내가보기를 만든 소파 DB에서 여러 처리에 대한 자습서 조인과 여러 관계에 따라

{_id, source_id, target_id, value} 

:

{_id , 
nodeName, 
group} 

및 저장 전통의 링크를

소스 및 대상 ID의 시퀀스를 내 보낸 다음이 시퀀스를 include_docs=true과 함께 목록 함수에 전달하고 소스 및 t 쌍으로 arget 것은 이런 구조에서 다시 모든 것을 스티치 : 내 목록은 적절한 JSON을 생산

{ 
    "nodes":[ 
    {"nodeName":"Name 1","group":"1"}, 
    {"nodeName":"Name 2","group":"1"}, 
    ], 
    "links": [ 
    {"source":7,"target":0,"value":1}, 
    {"source":7,"target":5,"value":1} 
    ] 
} 

있지만,지도보기 소스 문서의 행의 수를 반환 한 후 문서를 대상으로. 지금까지이 작업을 올바르게 수행하는 방법에 대한 아이디어가 전혀 없습니다. 문서의 _id에서 추가 값을 가져와서 기쁘지만 지금까지는 좋은 예제가 없습니다. 동일한 목표를 달성하기위한 대안 방법은 환영합니다. 지금까지 CouchDB의 값은 _id입니다.

업데이트 : 질문을 쓰는 동안 나는 즉각적인 문제를 분류 한 다른 견해를 생각해 냈지만 다른 옵션을보고 싶습니다. 업데이트 된지도 :

function(doc) { 
    if(doc.type == 'connection') { 

     if (doc.source_id) 
     emit([doc._id,0,"source"], {'_id': doc.source_id}); 
     if(doc.target_id) 
     emit([doc._id,1,"target"], {'_id': doc.target_id}); 
    } 

} 

답변

1

업데이트 된지도 기능이 더 적합합니다. 그러나 이미 "source""target"이므로 키에 01이 필요하지 않습니다.