2014-04-03 57 views
-1

在PHP我打電話MongoDB的JavaScript函數的start()如何從php mongodb調用javascript函數?

$username="root"; 

$password="root"; 

$mongo_uri="mongodb://".$username.":".$password."@localhost"; 

$connection = new MongoClient($mongo_uri); 

$db = $connection->test; 

$response = $db->execute("start()"); 

print_r($response); 

爲越來越

Array 
    (

     [ok] => 0 

     [errmsg] => unauthorized 

    ) 

$用戶名+ $密碼+ $ mongo_uri的結果 - 右,和$ DB給予ok連接,

但是得到未授權的錯誤$response = $db->execute("start()");

如何從php中調用mongodb函數start()?

回答

0

這裏的execute()方法是作爲MongoDB的db.eval()方法的包裝實現的。所以大概你指的是你已經加載到服務器端的一些服務器端JavaScript方法。

authentication roles手冊頁所示,eval需要特殊的權限,這些權限可能尚未授予您用來進行身份驗證的帳戶。這可能是事情一般CRUD操作的帳戶使用的帳戶不應該有這些特權級別。如果任何此類操作只能用於它自己的特權連接。

執行服務器端JavaScript對於生產系統來說通常不是一個好主意,如果你的函數實際上是一些相當微不足道的東西,那麼最好在你的本地庫代碼中重新實現它。

所以請注意日db.eval()手冊第警告,還要注意,即使有正確的權限分配,你將無法對分片羣集環境中運行此命令。

最後,還請參閱MongoCode類,以便在絕對需要的情況下定義JavaScript調用的更好方法。

+0

我創建管理所有可能的權限 錯誤仍然存​​在 – user3495941

+0

@ user3495941你可能分片羣集上的提到運行? –

+0

我在heroku上工作,我創建了具有所有可能特權角色的管理員:[「read」,「readWrite」,「dbAdmin」,「userAdmin」,「clusterAdmin」,「readAnyDatabase」,「readWriteAnyDatabase」,「userAdminAnyDatabase」,「dbAdminAnyDatabase 「] 錯誤仍然存​​在 – user3495941