看起來(至少在 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 Server 8.0 或更高版本會產生唯一的 _id。如果使用 MySQL Server 5.7,則必須手動定義 _id 欄位。
看起來(至少在 MySQL 5.7.23 版本中)如果在要「新增」的項目陣列中沒有設定 _id 欄位,就會發生錯誤...
[HY000] 文件缺少必要的欄位
新增 "_id" => xxxx 可以解決這個問題。