Как в 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)