mongo:多个查询与否?

时间:2011-11-28 05:26:59

标签: mongodb node.js

我想知道为许多对象查询mongo db的最佳方法,其中每个对象都有一个附加到它的_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
                });
            });
        });
    }
});

这似乎不对,但我不确定如何继续。我是否应该费心保留一系列附加消息?我也没有按照我设置架构的方式结婚。如果有更好的方法来跟踪它们之间的关系,或者更好的查询来实现这一点,请告诉我。 感谢

2 个答案:

答案 0 :(得分:1)

每封邮件只属于一个标题吗?如果是这样,您可以将标题ID存储为每条消息的一部分。然后,对于每个标题,请执行:

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

答案 1 :(得分:0)

您可以尝试使用$ in运算符来选择ObjectIds列表

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