2012-08-01 21 views
3

我的數據庫記錄的財產以後這樣的...如何使用php取消設置mongodb中的所有記錄字符串?

{ 
    "_id": ObjectId("50118b145e69ef2c0e007a2"), 
    "class": "customer", 
    "dbid": "1829", 
    "value": "[email protected]" 
} 

{ 
    "_id": ObjectId("50118b145e69ef2c0e007a1"), 
    "class": "customer", 
    "dbid": "1828", 
    "value": "[email protected]" 
} 

我的PHP代碼

define('DB_HOST', 'localhost'); 
define('DB_DBNAME', 'mydb'); 
define('DB_USERNAME', 'mongouser'); 
define('DB_PASSWORD', 'mongopasswd'); 
define('DB_DSN', "mongodb://". DB_USERNAME .":". DB_PASSWORD ."@". DB_HOST ."/". DB_DBNAME); 
$DB = new Mongo(DB_DSN); 
if (!$DB) { die('DB Connection failed!'); } 

$MONGODB = $DB->DB_DBNAME; 
$COLLECTION = $MONGODB->my_customer; 

我嘗試使用下面的代碼使用來自如刪除字段中的所有記錄$未設置「DBID」,但它不起作用。

PS:我嘗試在stackoverflow中搜索,但總是在命令行中顯示教程,但我需要它在PHP腳本中起作用。

$COLLECTION->update(array('$unset' => array('dbid' => true))); 

我試一下這段代碼也沒用。 :(

$COLLECTION->update(array('$unset' => array('dbid' => true)), array('multiple'=>true)); 

如果你們有什麼想法,請分享..

太謝謝你了。:)


---------更新--- -------

嗨,大家好,謝謝你的回答。

我已經找到了問題。

@Marc 你說得對!我忘了標準 ,我發現我的代碼也是錯誤的。

問題是mongodb擴展與定義值混淆。 (它認爲DB_DBNAME是一個數據庫名稱),所以,我添加+改變了一些代碼看起來像這樣。

$mongodb_name = DB_DBNAME; 
$MONGODB = $DB->$mongodb_name; 
$COLLECTION = $MONGODB->my_customer; 

現在,我嘗試@Marc示例代碼

從所有記錄中刪除($未設置)字符串......(工程!)

$COLLECTION->update(array('dbid' => array('$exists' => true)), array('$unset' => array('dbid' => true)), array('multiple' => true)); 

插入串入的所有記錄。 ..我使用這個代碼。 (Works!)

$COLLECTION->update(array('dbid' => array('$exists' => false)), array('$set' => array('dbid' => 'new_value')), array('multiple' => true)); 

謝謝你的一切幫助。 :)

回答

6

你忘了critearia,這樣的解決辦法是:

$COLLECTION->update(
    array('dbid' => array('$exists' => true)), 
    array('$unset' => array('dbid' => true)), 
    array('multiple' => true) 
) 
-1

我覺得像這樣的一些事會工作

$collection->update(
     array('$unset' => array('dbid' => true)); 
     array("upsert" => true, "multiple" => true) 
    ); 
相關問題