PHP Conference Japan 2024

Collection::add

(沒有版本資訊,可能只在 Git 中)

Collection::add新增集合文件

說明

public mysql_xdevapi\Collection::add(混合 $document): mysql_xdevapi\CollectionAdd

觸發將指定文件插入集合的操作,此方法支持多種變體。選項包括:

  1. 以 JSON 字串形式添加單個文件。

  2. 以陣列形式添加單個文件:[ 'field' => 'value', 'field2' => 'value2' ... ]

  3. 兩者混合使用,並且可以在同一次操作中添加多個文件。

參數

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 欄位。

新增備註

使用者貢獻的備註 2 則備註

cyork at echodreamz dot com
6 年前
看起來(至少在 MySQL 5.7.23 版本中)如果在要「新增」的項目陣列中沒有設定 _id 欄位,就會發生錯誤...

[HY000] 文件缺少必要的欄位

新增 "_id" => xxxx 可以解決這個問題。
jcastro at eftec dot cl
6 年前
它返回的是 mysql_xdevapi\CollectionAdd,而不是 mysql_xdevapi\Result
To Top