我想在mongodb中查询多个集合,我有一些像这样的数据
Collection stops {
{ stop_id : 1, stop_name: 'a'},
{ stop_id : 2, stop_name: 'b'}, ...
Collection stop_time {
{ stop_id : 1, trip_id: 40},
{ stop_id : 2, trip_id: 41}, ...
Collection trips {
{ trip_id : 40, route_id: 400},
{ trip_id : 41, route_id: 401}, ...
Collection route {
{ route_id : 400, route_name: 'foo'},
{ route_id : 401, route_name: 'bar'}, ...
对于每个stop_name,我想知道与它匹配的route_name ...(我没有选择他的数据结构,那是GTFS格式......)
有没有办法轻松做出回应我问题的查询?
由于
答案 0 :(得分:0)
这种方法对mongodb不好。你应该创建一个包含所有数据的集合,并且只进行一次查询。
这非常重要,因为:
如果无法迁移到一个集合架构,那么您可能应该执行以下操作:
var _ = require("underscore")._;
function get_all(cb) {
stops.find({}, function(err, stps, cb) {
stop_time.find({}, function(err, stptime) {
var all = _.map(stps, function(e) {
e.trip_id = stptime[e.stop_id].trip_id;
return e;
});
trips.find({}, function(err, trips) {
all = _.map(all, function(e) {
e.route_id = trips[e.trip_id].route_id;
return e;
});
route.find({}, function(err, routes) {
all = _.map(all, function(e) {
e.route_name = routes[e.route_id].route_name;
return e;
});
cb(all)
});
});
});
});
}
小心,如果DB中有大量数据,那么你可能应该使用游标。 http://mongoosejs.com/docs/api.html#querystream_QueryStream