取消来自 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 作为终止聚合的方法,该聚合需要很长时间才能完成。
开始 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 作为终止聚合的方法,该聚合需要很长时间才能完成。