mongo:多个查询或不?

我想知道最好的方法来查询mongo数据库的许多对象,其中每个有一个_id的数组附加到它。 我也想抓住引用的对象。 对象的模式如下所示:

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个“标题”,每个标题可以包含多达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 }); }); }); } }); 

这似乎是错误的,但我不确定如何继续。 我应该甚至打扰与保持一连串的消息? 我还没有像我设定我的模式那样结婚。 如果有更好的方法来跟踪他们之间的关系,或者更好的查询来实现这一点,请让我知道。 谢谢

每封邮件是否只属于一个标题? 如果是这样,您可以将标题ID作为每条消息的一部分进行存储。 那么对于每一个标题,做:

 db.messages.find({headline_id: current-headline-id-here}) 

您可以尝试使用$ in操作符来select一个ObjectId列表

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in