3

私のDBはこのようなものを記録しています...

{
   "_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;

以下のコードを使用して、delete フィールドなどのすべてのレコードから $unset "dbid" を使用しようとしましたが、機能しません。

PS: stackoverflow で検索しようとしましたが、常にコマンド ラインでチュートリアルを表示しますが、PHP スクリプトで動作する必要があります。

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

このコードも機能しませんでした。:(

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

アイデアがあれば共有してください..

どうもありがとう。:)


- - - - - 更新しました - - - - -

私はすでに問題の解決策を見つけました。

@マークあなたは正しいです!基準を忘れて しまい、コードも間違っていることがわかりました。

問題は、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 に答える