无法使用带有PHP的MongoDB更新数组中的新行

时间:2014-01-09 11:09:36

标签: php arrays mongodb

我正在尝试使用MongoDB PHP代码更新数组。

这是我的实际数组:

array
    [_id] => MongoId Object
        (
            [$id] => 52ce7a5f59f401a95c3f7430
        )

    [domain_data] => Array
        (
            [hostname] => google.com
        )
)

我需要像这样更新我的数组

 array
        [_id] => MongoId Object
            (
                [$id] => 52ce7a5f59f401a95c3f7430
            )

        [domain_data] => Array
            (
                [hostname] => google.com
                [valid] => 1
            )
    )

但是,数组正在像这样更新

array
    [_id] => MongoId Object
        (
            [$id] => 52ce7a5f59f401a95c3f7430
        )

    [domain_data] => Array
        (
            [valid] => 1
        )
)

这是我的代码:

$cursor = $collection->find();

$new_data = array('domain_data'=>array("valid"=>1));        
foreach ($cursor as $doc ){
    print_r($doc);            
    $collection->update(array(),array('$set'=>$new_data));
}

1 个答案:

答案 0 :(得分:0)

您正在使用具有新有效值的数组为“domain_data”设置全新值。相反,您只需要设置domain_data.valid键。

类似的东西:

<?php
$m = new MongoClient;
$collection = $m->test->test;

// clean out collection for test
$collection->drop();

// insert original document
$collection->insert( array(
    '_id' => new MongoID("52ce7a5f59f401a95c3f7430"),
    'domain_data' => array(
        'hostname' => 'google.com',
    )
) );

// new data, see how we're *not* setting a whole new array for 'domain_data':
$new_data = array('domain_data.valid' => 1);

// update
$collection->update(
    array( '_id' => new MongoID("52ce7a5f59f401a95c3f7430")),
    array( '$set' => $new_data )
);

// query
var_dump( $collection->findOne( array( '_id' => new MongoID("52ce7a5f59f401a95c3f7430") ) ) );