2011-11-28 83 views
1

我想知道最好的方法來查詢mongo數據庫的許多對象,其中每個都有一個_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 
    ... 
}); 

一部分(當然,這取決於如果我想繼續下去這個路線)是推消息ID的不工作(編輯仍然是一個空數組[事後]):

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

當我做我的查詢,我需要一次搶30「頭條新聞」,每個可以包含ref多達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})