搜尋

首頁  >  問答  >  主體

手動插入 MySQLx 集合

我有大量 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粉917406009P粉917406009316 天前408

全部回覆(1)我來回復

  • P粉191323236

    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 連接器的首席開發人員

    回覆
    0
  • 取消回覆