Seems that (at least with MySQL 5.7.23) if you do not set an _id field in the array of items to "add", it fails with error...
[HY000] Document is missing a required field
Adding "_id" => xxxx does resolve the issue.
(No version information available, might only be in Git)
Collection::add — Añade un documento a la colección
Desencadena la inserción del o de los documentos dados en la colección, y se admiten varias variantes de este método. Las opciones incluyen:
Añadir un solo documento en forma de string JSON.
Añadir un solo documento en forma de array como:
[ 'field' => 'value', 'field2' => 'value2' ... ]
Una mezcla de ambos, y varios documentos pueden ser añadidos en la misma operación.
document
Uno o varios documentos, y esto puede ser tanto JSON como un array de campos con sus valores asociados. No puede ser un array vacío.
El servidor MySQL genera automáticamente valores _id
únicos para
cada documento (recomendado), aunque esto también puede ser añadido manualmente. Este
valor debe ser único, de lo contrario la operación de adición fallará.
Una colección de objetos. Utilizar execute() para devolver un resultado que puede ser utilizado para consultar el número de elementos afectados, el número de advertencias generadas por la operación, o para recuperar una lista de identificadores generados para los documentos insertados.
Ejemplo #1 Ejemplo de mysql_xdevapi\Collection::add()
<?php
$session = mysql_xdevapi\getSession("mysqlx://user:password@localhost");
$session->sql("DROP DATABASE IF EXISTS addressbook")->execute();
$session->sql("CREATE DATABASE addressbook")->execute();
$schema = $session->getSchema("addressbook");
$create = $schema->createCollection("people");
$collection = $schema->getCollection("people");
// Añade dos documentos
$collection->add('{"name": "Fred", "age": 21, "job": "Construction"}')->execute();
$collection->add('{"name": "Wilma", "age": 23, "job": "Teacher"}')->execute();
// Añade dos documentos utilizando un solo objeto JSON
$result = $collection->add(
'{"name": "Bernie",
"jobs": [{"title":"Cat Herder","Salary":42000}, {"title":"Father","Salary":0}],
"hobbies": ["Sports","Making cupcakes"]}',
'{"name": "Jane",
"jobs": [{"title":"Scientist","Salary":18000}, {"title":"Mother","Salary":0}],
"hobbies": ["Walking","Making pies"]}')->execute();
// Recupera una lista de identificadores generados a partir del último add()
$ids = $result->getGeneratedIds();
print_r($ids);
?>
El resultado del ejemplo sería algo similar a:
Array ( [0] => 00005b6b53610000000000000056 [1] => 00005b6b53610000000000000057 )
Nota:
Un identificador único _id es generado por MySQL Server 8.0 o superior, como se demuestra en el ejemplo. El campo _id debe ser definido manualmente si se utiliza MySQL Server 5.7.
Seems that (at least with MySQL 5.7.23) if you do not set an _id field in the array of items to "add", it fails with error...
[HY000] Document is missing a required field
Adding "_id" => xxxx does resolve the issue.
It returns a mysql_xdevapi\CollectionAdd instead of a mysql_xdevapi\Result