gpt4 book ai didi

php - 异常 : can't temprelease nested lock

转载 作者:可可西里 更新时间:2023-11-01 09:45:27 25 4
gpt4 key购买 nike

我正在尝试在 Mongo 中运行一些服务器端 JS。我尝试执行的操作是:

db.dropDatabase();   // removing current database
db.copyDatabase('db_dump', 'db', 'localhost'); // substituting it with a dump

一切正常。当我将其存储为函数时:

function () {
db.dropDatabase();
return db.copyDatabase('db_dump', 'db', 'localhost');
}

并执行它,一切都很好并返回我 {"ok": 1}

但是当我尝试使用 php 驱动程序执行此操作时:

$db->execute("function(){ db.dropDatabase(); return db.copyDatabase('db_dump', 'db', 'localhost'); }");

我明白了

{
"retval": {
"errmsg":"exception: can't temprelease nested lock",
"code":10298,
"ok":0
},
"ok":1
}

虽然我的第一个想法是我只需要离开锁,所以我尝试了这个

$db->command(
array(
'$eval' => "function() { db.dropDatabase(); return db.copyDatabase('db_dump', 'db', 'localhost');}"
),
array(
'nolock'=> true
)
);

此时没有其他东西在使用数据库。

有什么办法可以消除这个错误吗?

我正在使用 Mongo 2.4.4PHP 5.3.13驱动程序 1.2.10附言在 PHP 5.4.16 上试过,情况是一样的

最佳答案

此命令无法通过 eval 调用命令(请参阅 this thread 有关此事的一些其他讨论)。您可以调用 copydb 而不是使用 JS 方法直接使用 MongoDB::command() 命令.以下脚本将在同一台服务器上的两个数据库之间进行复制,因为我省略了 fromhost 选项:

$m = new MongoClient();
$m->a->drop();
$m->admin->command([
'copydb' => 1,
'fromdb' => 'b',
'todb' => 'a',
]);

关于php - 异常 : can't temprelease nested lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17413679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com