是否可以在单个查询中(或以最快的方式)从一个集合中获取值数组,并获得一堆带有结果的文档...
collection2.find({bands: 'the killers'}, {eventId: 1}).toArray(function(err, docs) {
if(docs !== []){
//get all the event ID's
var eventIds = [];
for(var i = 0; i < docs.length; i++){
eventIds.push(docs[i].eventId);
}
//make a search with all ID's
collection.find({ _id: {$in: eventIds} }).toArray(function(err, docs){
res.send(docs);
});
}
});
所以我在这里找到杀手正在玩的所有事件,然后抓住所有的eventID并获得完整的事件信息。
我不想将乐队与乐队信息结合起来,因为乐队列表会变得非常大。我也知道你可以用{band:0}忽略某些字段 - 如果band数组很大,这会影响查询的速度吗?
答案 0 :(得分:1)
MongoDB不进行连接。查询两个集合中的信息需要2个查询。连接在应用程序端完成,如示例代码中所示。您的架构应该设计为使用一个索引查询完成简单快速的常见和重要操作。可以使用应用程序级联接,聚合管道或必要时映射/缩减来完成不常见和不太重要的操作。您可能需要考虑优化模式以避免连接以查找与乐队相关的事件信息,但我对您的用例知之甚少,因此我无法说出最佳课程。
从查询返回中省略某些字段会加快查询速度,因为省略的信息不必从服务器发送到客户端。