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
おりPHP 5.3.13
、driver 1.2.10
PS これを試着しましたPHP 5.4.16
が、状況は同じです