取消来自 Java API 的 MongoDB 查询

Cancel a MongoDB query from Java API

开始 MongoDB 查找或聚合操作后,我希望能够取消它。有时用户想取消一个很长的 运行 操作并继续做其他事情。

我知道可以使用 db.killOp() to stop a running operation, but there doesn't seem to be a good way to determine which operation is the one to kill. The accepted form is to use db.currentOp() 来查找来自同一客户端且具有相同操作的操作。但由于这是一个 Web 应用程序,所有操作似乎都来自同一个 "client",并且两个不同的用户可能会触发相同的操作。如果一位用户决定取消,我不想无意中杀死错误的人。

currentOp() 返回的每个操作都有唯一的 opid,但我看不到将 opid 映射到从 Java 开始的操作的方法API。在 Java API 的同步部分,当然在查找或聚合完成之前没有信息。但即使在异步 API 中,也只有结果的回调。

我检查了 currentOp() 返回的其他字段,似乎没有办法在每个查询上放置我自己的标记或计数器,以便我可以在事后关联它们。如何使用 Java API 允许用户在操作开始后 cancel/kill 进行 MongoDB 查找或聚合操作?

目前没有 API 选项可以通过 Java 驱动程序终止作业。有一个 open issue against this, however. As mentioned in the comments you might explore the use of maxTime 作为终止聚合的方法,该聚合需要很长时间才能完成。