2011-11-28 13 views
1

많은 객체에 대해 mongo db를 쿼리하는 가장 좋은 방법은 궁금합니다. 각 객체에는 _id의 배열이 첨부되어 있습니다. 나는 참조 된 객체들도 가져 가고 싶다. 객체 '스키마는 다음과 같습니다 mongo : 여러 개의 검색어가 필요하지 않습니까?

var headlineSchema = new Schema({ 
    title : String, 
    source : String, 
    edits : Array  // list of edits, stored as an array of _id's 
    ... 
}); 

... 그리고 필요한 경우, 참조 된 것 하나

: 문제의

var messageSchema = new Schema({ 
    message : String, 
    user : String, 
    headlineID : ObjectId // also contains a ref. back to headline it's incl. in 
    ... 
}); 

한 부분 (나는이를 계속하려면 잘 따라 내 쿼리를 수행 할 때

db.headline.update({_id : headlineid}, {$push: {edits : messageid} }, true); 

, 나는 한 번에 약 30 '헤드 라인'을 잡아해야하고, 각각의 : 경로) 메시지 ID의이 (편집 작동하지 밀어 것은 하늘의 배열 [] 이후)를 유지하다 하나는 심판을 포함 할 수있다. 최대 20 개 또는 30 개의 '메시지'에 도달합니다. 제 질문은 이러한 모든 것을 가져 오는 가장 좋은 방법은 무엇입니까? 나는 mongo가 관계형 데이터베이스가 아니라는 것을 알고 있습니다. 그래서 내가 원하는 것은 먼저 필요한 헤드 라인을 잡은 다음 첨부 된 모든 메시지를 얻기 위해 30 개 모두를 반복하는 것입니다.

db.headline.find({'date': {$gte: start, $lt: end} }, function (err, docs) { 
    if(err) { console.log(err.message); } 
    if(docs) { 
     docs.forEach(function(doc){ 
      doc.edits.forEach(function(ed){ 
       db.messages.find({_id:ed}, function (err, msg) { 
        // save stuff 
       }); 
      }); 
     }); 
    } 
}); 

이것은 잘못된 것처럼 보이지만 진행 방법을 잘 모르겠습니다. 첨부 된 메시지를 계속 보관해야합니까? 나는 내 스키마를 설정 한 방식과 결혼하지 않았다. 이들 간의 관계를 추적하는 더 좋은 방법이 있거나 더 좋은 쿼리가 있으면이를 알려주십시오. 감사

답변

1

의 목록을 선택하는 운전자에 $를 사용하여 시도 할 수 있을까? 그렇다면 각 메시지의 일부로 헤드 라인 ID를 저장할 수 있습니다. 그런 다음 각 광고 제목에 대해 다음을 수행하십시오.

db.messages.find({headline_id: current-headline-id-here}) 
관련 문제