gpt4 book ai didi

javascript - mongoDB 中的多个查询

转载 作者:行者123 更新时间:2023-11-28 09:31:47 25 4
gpt4 key购买 nike

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

有没有一种方法可以轻松地执行查询来响应我的问题?

谢谢

最佳答案

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

这非常重要,因为:

  1. 没有交易
  2. 没有连接
  3. 一个文档上只有原子操作
  4. 您将无法使用聚合框架

如果无法迁移到一种集合模式,那么您可能应该执行以下操作:

    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)
});
});

});
});
}

要小心,如果数据库中有大量数据,那么您可能应该使用游标。 http://mongoosejs.com/docs/api.html#querystream_QueryStream

关于javascript - mongoDB 中的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13631229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com