似乎(至少在 MySQL 5.7.23 中)如果您没有在要“添加”的项目数组中设置 _id 字段,它会因错误而失败...
[HY000] 文档缺少必需的字段
添加 "_id" => xxxx 可以解决问题。
(没有版本信息可用,可能只在 Git 中)
Collection::add — 添加集合文档
触发将给定文档插入到集合中,并支持此方法的多种变体。选项包括
将单个文档添加为 JSON 字符串。
将单个文档添加为数组,如下所示:[ 'field' => 'value', 'field2' => 'value2' ... ]
两种方法的混合,并且可以在同一个操作中添加多个文档。
document
一个或多个文档,可以是 JSON 或者一个包含字段及其关联值的数组。这不能是一个空数组。
MySQL 服务器会自动为每个文档生成唯一的 _id
值(推荐),但也可以手动添加。该值必须是唯一的,否则添加操作将失败。
一个 CollectionAdd 对象。使用 execute() 返回一个 Result,它可用于查询受影响项的数量、操作生成的警告数量,或获取插入文档的生成 ID 列表。
示例 #1 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");
// 添加两个文档
$collection->add('{"name": "Fred", "age": 21, "job": "Construction"}')->execute();
$collection->add('{"name": "Wilma", "age": 23, "job": "Teacher"}')->execute();
// 使用单个 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();
// 从上次 add() 获取生成 ID 列表
$ids = $result->getGeneratedIds();
print_r($ids);
?>
上面的示例将输出类似于以下内容
Array ( [0] => 00005b6b53610000000000000056 [1] => 00005b6b53610000000000000057 )
注意:
MySQL 服务器 8.0 或更高版本会生成唯一的 _id,如示例所示。如果使用 MySQL 服务器 5.7,则必须手动定义 _id 字段。
似乎(至少在 MySQL 5.7.23 中)如果您没有在要“添加”的项目数组中设置 _id 字段,它会因错误而失败...
[HY000] 文档缺少必需的字段
添加 "_id" => xxxx 可以解决问题。