Codekata o howto para usar el driver de PHP directo sin librerías para hacer actualizaciones masivas en los datos. Es un resumen sobre cómo hacer estas cosas que no he encontrado por Internet, así que aquí estamos probando y compartiendo..
Este post es un poco continuación sobre este otro sobre el rendimiento en inserciones de Mongodb.
Una operación básica para editar un campo de un documento
<?php
$startTime = microtime(true);
$mongoManager = new \MongoDB\Driver\Manager('mongodb://127.0.0.1:27017');
$bulkWrite = new \MongoDB\Driver\BulkWrite();
$filter = ['col2' => 'Data 2'];
$newObject = ['$set' => ['col3' => [
'col30' => 'Data 30',
'col31' => 'Data 31'
]]];
$updateOptions = [
'multi' => true, // Update multiple documents that match the filter..
'upsert' => false // If no document match, creates a new one..
];
$bulkWrite->update($filter, $newObject, $updateOptions);
$result = $mongoManager->executeBulkWrite('testing.acollection', $bulkWrite);
var_dump($result);
$endTime = microtime(true);
echo 'done!'.PHP_EOL;
echo 'Taken time: '.($endTime - $startTime).' secs.'.PHP_EOL;
Simplemente busca todos los elementos de la colección testing.acollection que contengan el campo col2 con valor ‘Data 2’.
Las operaciones disponibles en MongoDB
Como operaciones disponibles hay muchas: el $set anterior, $pull, $push, $pop, $, $[], etcétera.. Todas las operaciones disponibles se pueden encontrar en la siguiente documentación:
https://docs.mongodb.com/manual/reference/operator/update/