Insertion manuelle dans une collection MySQLx
P粉917406009
P粉917406009 2024-02-21 19:01:38
0
1
394

J'ai beaucoup de données JSON que je dois insérer dans une table de collection MySQLx. L'implémentation actuelle de Node continue de planter lorsque j'essaie de charger des données JSON. Je suppose que c'est parce que j'insère trop de données à la fois via l'API de collecte. Je souhaite insérer manuellement des données dans la base de données à l'aide d'instructions SQL traditionnelles (j'espère qu'elles me permettront de surmonter ce crash de NodeJs).

Le problème est que j'ai cette définition de tableau :

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

Mais quand je cours 插入文档值('{}',DEFAULT,DEFAULT) J'obtiens :

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

J'ai essayé de ne pas fournir de valeur par défaut, en utilisant NULL (mais _id n'autorise pas NULL, même si c'est la valeur par défaut), en utilisant 0 pour _id, en utilisant des nombres et uuid_to_bin(uuid()), mais j'obtiens toujours la même chose erreur.

Comment insérer ces données directement dans la table (j'utilise session.sql('INSERT...').bind(JSON.stringify(data)).execute() - en utilisant la bibliothèque @mysql/ xdevapi)

P粉917406009
P粉917406009

répondre à tous(1)
P粉191323236

_id 列是根据 JSON 文档中同名字段的值自动生成的。当您使用 CRUD 接口插入文档时,X Plugin 能够为此字段生成唯一值。然而,通过执行简单的 SQL 语句,您也绕过了该逻辑。因此,如果您自己生成 _id, vous pouvez insérer le document, sinon vous rencontrerez cette erreur.

À titre d'exemple (en utilisant crypto .randomInt()) :

const { randomInt } = require('crypto')

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

Je suis cependant curieux de connaître le problème avec l'API CRUD et je voulais voir si je pouvais également le reproduire. Dans ce cas, comment insérer ces documents et quels retours (le cas échéant) sont fournis en cas de « crash » ?

Avertissement : je suis le développeur principal du connecteur MySQL X DevAPI pour Node.js

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal