You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动插入JSON到MySQLx Collection时生成列_id报错求助

解决MySQLx Collection表手动SQL插入的问题

问题根源

你的错误是因为插入语句中包含了生成列(_id是STORED GENERATED,_json_schema是VIRTUAL GENERATED),这类列的值由数据库自动计算生成,不允许手动指定任何值(包括DEFAULT、NULL或自定义值)。

正确的SQL插入方式

只需要指定可写入的doc列,让数据库自动处理生成列:

INSERT INTO documents (doc) VALUES ('{}');

结合@mysql/xdevapi的Node.js实现

单条数据插入

const targetData = { /* 你的JSON数据 */ };
await session.sql('INSERT INTO documents (doc) VALUES (?)')
  .bind(JSON.stringify(targetData))
  .execute();

批量数据插入(分批次避免崩溃)

如果数据量极大,建议分批次插入(比如每批次1000条),避免内存过载:

const batchSize = 1000;
const allData = [/* 你的大量JSON数据数组 */];

for (let i = 0; i < allData.length; i += batchSize) {
  const batch = allData.slice(i, i + batchSize);
  // 生成对应数量的占位符
  const placeholders = batch.map(() => '(?)').join(', ');
  // 绑定所有批次的JSON字符串
  await session.sql(`INSERT INTO documents (doc) VALUES ${placeholders}`)
    .bind(...batch.map(item => JSON.stringify(item)))
    .execute();
}

补充说明

  • 分批次插入时可根据服务器性能调整batchSize,平衡插入速度和内存占用
  • 若需要自定义_id,需先修改表结构取消其生成列属性,但不建议这么做(破坏Collection表的原生设计)

内容的提问来源于stack exchange,提问作者Joel Nation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:24:46