MongoDB在大型数据库中慢速查询字符串

时间:2017-03-03 12:15:30

标签: javascript mongodb express

我正在做一个项目,我们将用d3.js将美国的航班可视化一个月。

我刚接触MongoDB中的大型数据库,刚开始考虑索引我的数据库以改进查询。

我有一个大型数据库(约655000行),其中包含2016年3月起在美国的所有航班,格式为:

"_id" : ObjectId("58b5fdf5fa5bf5750f9a34b4"),
"MONTH" : 3,
"DAY_OF_MONTH" : 1,
"DAY_OF_WEEK" : 2,
"FL_DATE" : "2016-03-01",
"CARRIER" : "AA",
"TAIL_NUM" : "N793AA",
"FL_NUM" : 1,
"ORIGIN" : "JFK",
"DEST" : "LAX",
"CRS_DEP_TIME" : 900,
"DEP_TIME" : 852,
"DEP_DELAY" : -8,
"DEP_DELAY_NEW" : 0,
"CRS_ARR_TIME" : 1234,
"ARR_TIME" : 1214,
"ARR_DELAY" : -20,
"ARR_DELAY_NEW" : 0,
"CANCELLED" : 0,
"CANCELLATION_CODE" : "",
"CRS_ELAPSED_TIME" : 394,
"ACTUAL_ELAPSED_TIME" : 382,
"AIR_TIME" : 355,
"DISTANCE" : 2475,
"CARRIER_DELAY" : "",
"WEATHER_DELAY" : "",
"NAS_DELAY" : "",
"SECURITY_DELAY" : "",
"LATE_AIRCRAFT_DELAY" : "",

我想通过执行此代码查询离开LAX的所有航班,但速度非常慢。

app.get('/getflights', (req, res) => {
if(err) console.log(err);
console.log("Loading data from flights...");
db.collection('flightdata')
  .find({ORIGIN:/^JFK/})
  .toArray((err, result) => {
  if(err) throw err;
  res.json(result);
});

我的问题是:如何优化此查询?在MongoDB文档中看了很多,但不能理解我应该如何做到这一点。

修改 添加限制并在评论后跳过,确保它更快,但它只获取1000行,我需要所有数据。

db.collection('flightdata').find({ORIGIN:"LAX"}).limit(1000).skip(1000).toArray((err, result) => {
      if(err) throw err;
        console.log("Fetch");
        res.json(result);
    });

修改 当运行db.flightdata({ORIGIN:" LAX"})。在终端中解释()我得到:

"queryPlanner" : {
    "plannerVersion" : 1,
    "namespace" : "58b61138d383ad325b7e8892_infovis.flightdata",
    "indexFilterSet" : false,
    "parsedQuery" : {
        "ORIGIN" : {
            "$eq" : "LAX"
        }
    },
    "winningPlan" : {
        "stage" : "FETCH",
        "inputStage" : {
            "stage" : "IXSCAN",
            "keyPattern" : {
                "ORIGIN" : 1
            },
            "indexName" : "_origin",
            "isMultiKey" : false,
            "multiKeyPaths" : {
                "ORIGIN" : [ ]
            },
            "isUnique" : false,
            "isSparse" : false,
            "isPartial" : false,
            "indexVersion" : 2,
            "direction" : "forward",
            "indexBounds" : {
                "ORIGIN" : [
                    "[\"LAX\", \"LAX\"]"
                ]
            }
        }
    },
    "rejectedPlans" : [ ]
},
"serverInfo" : {
    "host" : "mtm-0-0-shard-00-00-yf1oj.mongodb.net",
    "port" : 27000,
    "version" : "3.4.2",
    "gitVersion" : "3f76e40c105fc223b3e5aac3e20dcd026b83b38b"
},
"ok" : 1

0 个答案:

没有答案