Как в mongoDb PHP заменить все значения, кроме идентификатора в операции BulkWrite? - PullRequest
0 голосов
/ 15 сентября 2018

Как в mongoDb PHP заменить все значения, кроме идентификатора в операции BulkWrite?

Ниже я попробовал с простой коллекцией-> updateOne (....). Но обновление BulkWrite-> тоже не работает. Мне в основном нужен BulWrite для того же идентификатора, совершенно новых значений, потому что новые значения - это очень большой вложенный массив, и нет смысла устанавливать каждое значение явно.

В этом посте говорится, что я должен явно указать идентификатор среди сохраненных значений, что должно перезаписать предыдущую сущность. Но это не работает для меня. MongoDB: обновить весь документ, кроме _id, используя драйвер C #

$mgm = new MongoDB\Driver\Manager( "mongodb://localhost:27017" ); // $connectionUri,$connectionOptions
$mgc = new MongoDB\Client();
$mgbw = new MongoDB\Driver\BulkWrite();   
$mgc_IS = $mgc->selectCollection( 'db', 'collection', [] ); 

$ust = $mgc_IS->findOne([ 'alias'=> '2121515456' ]);
echo "<br> us!==null" .  ( $ust!==null );
if( $ust!==null ) {
    $_id = $ust->_id;
    var_dump( $ust ); // MongoDB\Model\BSONDocument  // var_dump( $ust->toArray()  will not work on BSONDocument
    $ustA = $ust->getArrayCopy();
    foreach ( $ustA as $k=>$v ) {
        if( is_scalar($v) ) { $ustA[$k]='neValue'; }
        else if ( is_array($v) ) { $ustA[$k] = [ 'a'=>1, 'n'=>2, 'c'=>3 ]; }
    } // foreach ( $ustA as $k=>$v ) 
    $ustA['alias']= '2121515456';
    $ustA['_id']= $_id;
    $ust_id = $mgc_IS->updateOne( [ '_id'=>$_id ] , [ '$set'=>$ustA], [ 'multi' => false, 'upsert' => true ] ); 
    $ust2 = $mgc_IS->findOne([ 'alias'=>'2121515456' ]);  
    var_dump( $ust2 ); //contains the same objcet  + new values 
} // if($ust!==null) 

1 Ответ

0 голосов
/ 16 сентября 2018

На самом деле, я прошу прощения за вопрос, кажется устал.Чтобы заменить все значения, кроме id, нужно использовать метод replace.Операции замены аналогичны операциям обновления, но вместо обновления документа для включения новых полей или новых значений полей операция замены заменяет весь документ новым документом, но сохраняет значение _id исходного документа.

https://docs.mongodb.com/php-library/master/tutorial/crud/#replace-documents https://docs.mongodb.com/php-library/master/reference/method/MongoDBCollection-bulkWrite/index.html

MongoDB\Collection::replaceOne
MongoDB\Collection::findOneAndReplace
MongoDB\Collection::bulkWrite( [[ 'replaceOne' => [ $filter, $replacement, $options ] ], ]);

И эта статья Алекса Татулченкова (2016) очень полезна: https://medium.com/@webtota/php7-and-mongodb-madness-148cfc30bc5b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...