【发布时间】:2014-02-23 16:05:16
【问题描述】:
我有一个包含 3257477 个城市的 MongoDB 集合,我在 NodeJS 上使用 Mongoose 来访问它。我反复向它发出请求(每 500 毫秒一次)。请求通常会很快得到答复。但是,当我输入错误时,查询需要很长时间,并且请求开始堆积,直到初始请求得到答复。以下是我收集的一些请求和响应日志:
21:48:50 started query for "new"
21:48:50 finished query for "new"
21:48:52 started query for "newj ljl" // blockage
21:48:54 started query for "newj"
21:48:55 started query for "new"
21:48:57 started query for "new ye"
21:48:59 started query for "new york"
21:49:08 finished query for "newj ljl" // blockage removed, quick queries flood in
21:49:08 finished query for "new"
21:49:08 finished query for "new york"
21:49:08 finished query for "new ye"
21:49:23 finished query for "newj"
我可以取消客户提出的请求,因此我不必担心以错误顺序返回的查询。而且我现在对如何使查询更快不感兴趣,因为查询实际正确拼写的速度很快。
我想知道新请求如何取消同一客户端发出的旧请求。换句话说,"newj ljl" 在"newj" 到达时被取消,"newj" 在"new" 到达时被取消,依此类推。如果它只是要被扔掉,为什么要捆绑数据库?
有没有合适的方法来做到这一点?
更新:
我知道db.currentOp().inprog,我想我可以使用该数组中文档的client 属性来了解它是否是重复请求,但我不太清楚如何访问它来自猫鼬。我也不确定 何时 这样做,或者我如何知道哪个请求是从 this 客户端产生的(因此要取消哪个)。我想要一个使用 Mongoose 的实际代码示例,或者如果可能的话,使用本机 NodeJS MongoDB 驱动程序!
下面是一些示例代码:
models.City.find({ ... })
.exec(function (err, cities) {
});
【问题讨论】: