我想知道为许多对象查询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
});
});
});
}
});
这似乎不对,但我不确定如何继续。我是否应该费心保留一系列附加消息?我也没有按照我设置架构的方式结婚。如果有更好的方法来跟踪它们之间的关系,或者更好的查询来实现这一点,请告诉我。 感谢
答案 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