mongoDB中的多个查询

时间:2012-11-29 17:20:39

标签: javascript mongodb gtfs

我想在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格式......)

有没有办法轻松做出回应我问题的查询?

由于

1 个答案:

答案 0 :(得分:0)

这种方法对mongodb不好。你应该创建一个包含所有数据的集合,并且只进行一次查询。

这非常重要,因为:

  1. 没有交易
  2. 没有联接
  3. 一个文档只有原子操作
  4. 您将无法使用聚合框架
  5. 如果无法迁移到一个集合架构,那么您可能应该执行以下操作:

        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