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 — Adiciona um documento na coleção
Dispara a inserção do(s) documento(s) informado(s) na coleção, múltiplas variantes deste método são suportadas. As opções incluem:
Adiciona um único documento como uma string JSON.
Adiciona um único documento como um array no formato:
[ 'field' => 'value', 'field2' => 'value2' ... ]
Uma combinação de ambos, múltiplos documentos podem ser adicionados na mesma operação.
document
Um ou múltiplos documentos, pode ser um JSON ou um array de campos com seus valores associados. Não pode ser um array vazio.
O servidor MySQL gera automaticamente um valor único de _id
para
cada documento (recomendado), embora também possa ser adicionado manualmente. Este valor precisa ser
único, caso contrário a operação de adição falhará.
Um objeto CollectionAdd. Use execute() para retornar um Result que possa ser usado para consultar o número de itens afetados, o número de alertas gerados pela operação, ou para buscar uma lista de IDs gerados para os documentos inseridos.
Exemplo #1 Exemplo 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");
// Adiciona dois documentos
$collection->add('{"name": "Fred", "age": 21, "job": "Construction"}')->execute();
$collection->add('{"name": "Wilma", "age": 23, "job": "Teacher"}')->execute();
// Adiciona dois documentos usando um único 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();
// Busca uma lista de IDs gerados pelo último add()
$ids = $result->getGeneratedIds();
print_r($ids);
?>
O exemplo acima produzirá algo semelhante a:
Array ( [0] => 00005b6b53610000000000000056 [1] => 00005b6b53610000000000000057 )
Nota:
Um _id único é gerado pelo MySQL Server 8.0 ou superior, como demonstrado no exemplo. O campo _id precisa ser definido manualmente se o MySQL Server 5.7 estiver sendo usado.
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