Rumah  >  Soal Jawab  >  teks badan

Memasukkan secara manual ke dalam koleksi MySQLx

Saya mempunyai banyak data JSON yang perlu saya masukkan ke dalam jadual Koleksi MySQLx. Pelaksanaan Node semasa terus ranap apabila saya cuba memuatkan data JSON, saya mengesyaki ini kerana saya memasukkan terlalu banyak data sekaligus melalui API pengumpulan. Saya mahu memasukkan data secara manual ke dalam pangkalan data menggunakan penyataan SQL tradisional (semoga ia akan membantu saya melalui ranap NodeJs ini).

Masalahnya ialah saya mempunyai definisi jadual ini:

+--------------+---------------+------+-----+---------+-------------------+
| 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 |
+--------------+---------------+------+-----+---------+-------------------+

Tetapi apabila berlari 插入文档值('{}',DEFAULT,DEFAULT) Saya dapat:

ERROR 3105 (HY000): The value specified for generated column '_id' in table 'documents' is not allowed.

Saya telah cuba untuk tidak memberikan nilai lalai, menggunakan NULL (tetapi _id tidak membenarkan NULL, walaupun itu lalai), menggunakan 0 untuk _id, menggunakan nombor dan uuid_to_bin(uuid()), tetapi saya masih mendapat yang sama kesilapan.

Bagaimana untuk memasukkan data ini terus ke dalam jadual (saya menggunakan session.sql('INSERT...').bind(JSON.stringify(data)).execute() - menggunakan perpustakaan @mysql/ xdevapi)

P粉917406009P粉917406009240 hari yang lalu325

membalas semua(1)saya akan balas

  • P粉191323236

    P粉1913232362024-02-22 09:33:46

    _id 列是根据 JSON 文档中同名字段的值自动生成的。当您使用 CRUD 接口插入文档时,X Plugin 能够为此字段生成唯一值。然而,通过执行简单的 SQL 语句,您也绕过了该逻辑。因此,如果您自己生成 _id, anda boleh memasukkan dokumen, jika tidak, anda akan menghadapi ralat ini.

    Sebagai contoh (menggunakan crypto .randomInt()):

    const { randomInt } = require('crypto')
    
    session.sql('insert into documents (doc) values (?)')
      .bind(JSON.stringify({ _id: randomInt(Math.pow(2, 48) - 1) }))
      .execute()

    Saya ingin tahu tentang isu dengan API CRUD, dan ingin melihat sama ada saya boleh mengeluarkannya semula. Dalam kes ini, bagaimanakah anda memasukkan dokumen ini dan apakah maklum balas (jika ada) yang diberikan apabila ia "ranap"?

    Penafian: Saya ialah pembangun utama penyambung MySQL X DevAPI untuk Node.js

    balas
    0
  • Batalbalas