我正在尝试在 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.4
,
PS试了一下PHP 5.3.13
,情况还是一样driver 1.2.10
PHP 5.4.16