1

我在 MongoDB shell(版本 4.2,作为参考)中运行以下命令:

while(true) { db.c.update({_id:1}, {$inc: {n: 1}}) }

我想打破 while 循环,但不结束 MongoDB shell。如果我使用Ctrl+C循环结束,还有mongo过程(就像我已经完成exit)。

查看我发现为“中止”的mongo shell 文档Ctrl+G,但它不起作用(它似乎什么也没做)。

有可能做我正在尝试的事情吗?目的是Ctrl+G什么?

谢谢!

4

2 回答 2

2

不可能。您将中止 MongoDB 操作与执行 JS 混淆了。

Ctrl + G中止单个CRUD 操作,而不是while(true){...}

让我们看看这个例子:

db.collection.find({$where:"this.foo==1"});print("1");db.collection.find({$where:"this.foo==1"});print("2");
> executing...
> Ctrl + G
> 1
> executing...
> Ctrl + G
> 2
于 2020-06-04T18:23:42.677 回答
1

我们不应该将 JS 执行与中止 shell 混淆。

要在 MongoDB shell 中中止 JS 查询,请查看此线程:如何在 mongo JavaScript shell 中中止查询

在编程方面,可以break用来引起 JS 循环中断,而不影响 shell。

例如,要每 2 秒只重复 10 次你的狙击,你可以做这样的事情......

var i=1;
while(true) {
    db.c.update({_id:1}, {$inc: {n: 1}});
    if(i>10) {
        break;
    }
    sleep(2000);
    i++;
}

此外,MongoDB shell 支持try/catch块,以及sleep()方法。我相信你所需要的一切都在那里:-)。

于 2020-11-07T12:34:52.730 回答