3

我的数据库记录了这样的事情......

{
   "_id": ObjectId("50118b145e69ef2c0e007a2"),
   "class": "customer",
   "dbid": "1829",
   "value": "aaa@hotmail.com" 
}

{
   "_id": ObjectId("50118b145e69ef2c0e007a1"),
   "class": "customer",
   "dbid": "1828",
   "value": "bbb@hotmail.com" 
}

我的 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;

我尝试使用下面的代码从所有记录(如删除字段)中使用 $unset "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 示例代码

从所有记录中删除 ($unset) 字符串...(有效!)

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

要将字符串插入所有记录...我使用此代码。(作品!)

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

2 回答 2

6

您忘记了标准,因此解决方案是:

$COLLECTION->update(
    array('dbid' => array('$exists' => true)),
    array('$unset' => array('dbid' => true)),
    array('multiple' => true)
)
于 2012-08-01T14:20:49.190 回答
-1

我认为这样的事情会起作用

    $collection->update(
        array( '$unset' => array('dbid' => true) );
        array("upsert" => true, "multiple" => true)
    );
于 2012-08-01T11:23:45.267 回答