我有大量 JSON 資料需要插入到 MySQLx Collection 表中。當我嘗試載入 JSON 資料時,目前的 Node 實作不斷崩潰,我懷疑這是因為我透過集合 API 一次插入了太多資料。我想使用傳統的 SQL 語句手動將資料插入資料庫(希望它們能讓我度過這次 NodeJs 崩潰)。
問題是我有這個表定義:
+--------------+---------------+------+-----+---------+-------------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------+------+-----+---------+-------------------+ | doc | json | YES | | NULL | | | _id | varbinary(32) | NO | PRI | NULL | STORED GENERATED | | _json_schema | json | YES | | NULL | VIRTUAL GENERATED | +--------------+---------------+------+-----+---------+-------------------+
但是運行時
插入文檔值('{}',DEFAULT,DEFAULT)
我得到:
ERROR 3105 (HY000): The value specified for generated column '_id' in table 'documents' is not allowed.
我嘗試過不提供預設值,使用NULL(但_id不允許NULL,即使這是預設值),使用0表示_id,使用數字和uuid_to_bin(uuid()),但我仍然得到相同的錯誤。
如何直接將此資料插入表中(我正在使用session.sql('INSERT...').bind(JSON.stringify(data)).execute()
- 使用@mysql / xdevapi 庫)
P粉1913232362024-02-22 09:33:46
_id
欄位是根據 JSON 文件中同名欄位的值自動產生的。當您使用 CRUD 介面插入文件時,X Plugin 能夠為此欄位產生唯一值。然而,透過執行簡單的 SQL 語句,您也繞過了該邏輯。因此,如果您自己產生 _id
,您就可以插入文檔,否則您將遇到該錯誤。
作為範例(使用 crypto .randomInt()
):
const { randomInt } = require('crypto') session.sql('insert into documents (doc) values (?)') .bind(JSON.stringify({ _id: randomInt(Math.pow(2, 48) - 1) })) .execute()
雖然我對 CRUD API 的問題很好奇,並且想看看我是否也能夠重現它。在這種情況下,您如何插入這些文件以及當它「崩潰」時提供什麼樣的回饋(如果有)?
免責聲明:我是 Node.js 的 MySQL X DevAPI 連接器的首席開發人員