2013-01-19 4 views
6

나는 다음과 같은 LINQ 쿼리의 CouchDB를 JS보기 상당을 찾고 있어요 : 데이터 소스 피드에 대한 외래 키가CouchDB와 동일한 Sql NOT IN?

var query = 
     from f in context.Feed 
     where !(from ds in context.DataSource 
       select ds.Feed_ID) 
     .Contains(f.ID) 
     select f; 

. 한마디로

는 모든 데이터 소스와 연결되지 피드 얻을 당신은지도에 피드 및 데이터 소스를 결합하기 위하여 view collation을 사용할 수 있습니다

+0

더 특정 데이터 소스와 관련되지 않은 피드 '또는'모든 데이터 소스와 관련되지 않은 피드 모두 가져 오기 ' – joscas

답변

2

감사합니다 :

function(doc) { 
    if (!doc.type) return; 
    if (doc.type == "feed") emit(doc._id, null); 
    if (doc.type == "ds" && doc.feed) emit(doc.feed, null); 
} 

과에 감소 피드에 연결된 데이터 소스 문서가있는 피드 ID를 필터링하십시오. 예 : group_levelbuild-in_count 및 쿼리의 사용 :

{"id":"1", "type":"feed"} 
{"id":"2", "type":"feed"} 
{"id":"3", "type":"ds", "feed":1} 
{"id":"4", "type":"ds", "feed":1}} 

당신에게 줄 것이다 : 데이터베이스에 대한

http://127.0.0.1:5984/test/_design/join/_view/not_in?group_level=1 

{"rows":[ 
{"key":"1","value":3}, 
{"key":"2","value":1} 
]} 

>1 데이터 소스에서 참조가 그 공급 문서입니다 . 순수한 피드 목록을 얻으려면 클라이언트에 value>1 또는 list function 인 레코드를 생략하면됩니다.

편집 : 목록 기능으로 :

function(head, req) { 
    var row; 
    while (row = getRow()) { 
    if (row.value == 1) 
     send(row.key + "\n"); 
    } 
} 

및 쿼리 :

http://127.0.0.1:5984/test/_design/join/_list/not_ds/not_in?group_level=1 

당신은 데이터 소스에서 밖으로 참조하여 공급 문서에 최종 결과를 얻을 것이다. ID 목록이있는 텍스트이며, JSON 배열에도 사용할 수 있습니다.

0

에 대한 바로 응답 Sql NOT IN의 CouchDB 해당 항목은 다음과 같습니다. 해당 사항이 없습니다. 에 대해 couchdb view API에 쿼리 옵션이 없습니다.이 아닙니다.

그러나, 당신은 어떤 데이터 소스 또는 특정 데이터 소스에 관련되지 않은 에 관련된 피드 을 얻기에 관심이 있다면 따라 당신의 목표를 달성하는 다른 방법이있을 수 있습니다.

0

나는 이것이 오래된 게시물 인 것을 알고 있지만 같은 문제에 직면 해 Marcin의 대답은 정확하지만 불완전하다고 생각합니다.내 경우

나는 특정 excludeId와 제외한 모든 행을 얻을 선택하려면 다음 목록 기능을 사용 :

function(head, req) { 
start({ 'headers': { 'Content-Type': 'application/json' } }); 
var rows = []; 
while (row = getRow()) { 
    if (!req.query.exceptId || doc.documentId != req.query.exceptId) { 
     rows.push(row); 
    } 
} 
send(JSON.stringify({ total_rows: rows.length, rows: rows })); 
} 

당신이 읽을 수있는 당신 말은 '모든 얻을 here