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

如何在MySQL中创建类似Mongoose的含嵌套评论结构的表Schema

MySQL实现Mongoose嵌套评论结构的表设计方案

你提到的Mongoose结构对应MongoDB的文档嵌套存储逻辑,代码如下:

mongoose.Schema({
  title: { type: String },
  subtitle: { type: String },
  comments: [{
    commentSubject: { type: String },
    commentBody: { type: String }
  }]
})

要在MySQL中实现完全一致的功能,采用主内容表+评论从表的一对多关联方案即可,具体建表和使用方式如下:

1. 建表语句

主内容表(兼容文章、商品等场景,表名可自行修改)

CREATE TABLE items (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键唯一ID',
  title VARCHAR(255) NOT NULL COMMENT '内容标题',
  subtitle VARCHAR(500) COMMENT '内容副标题',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '内容创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

评论从表

通过item_id字段关联主内容表的主键,实现一条主内容对应多条评论的关联关系:

CREATE TABLE comments (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '评论唯一ID',
  item_id INT UNSIGNED NOT NULL COMMENT '关联的主内容ID',
  comment_subject VARCHAR(255) NOT NULL COMMENT '评论主题',
  comment_body TEXT NOT NULL COMMENT '评论正文',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '评论发布时间',
  -- 外键约束,主内容删除时对应评论自动删除,不需要可去掉
  FOREIGN KEY (item_id) REFERENCES items(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2. Node.js中查询示例

查询时先查主内容,再关联查询对应评论,拼接后即可得到和Mongoose查询完全一致的结构,以下是基于mysql2库的原生查询示例:

const mysql = require('mysql2/promise');

// 根据ID查询单条主内容及对应全部评论
async function getItemWithAllComments(itemId) {
  const conn = await mysql.createConnection({
    host: '127.0.0.1',
    user: '你的数据库用户名',
    password: '你的数据库密码',
    database: '你的数据库名称'
  });
  // 查询主内容
  const [itemRes] = await conn.execute('SELECT * FROM items WHERE id = ?', [itemId]);
  if (itemRes.length === 0) {
    await conn.end();
    return null;
  }
  // 查询对应评论,按发布时间倒序排列
  const [commentRes] = await conn.execute('SELECT * FROM comments WHERE item_id = ? ORDER BY created_at DESC', [itemId]);
  // 拼接结构
  const result = {
    ...itemRes[0],
    comments: commentRes
  };
  await conn.end();
  return result;
}

如果使用Sequelize、TypeORM等ORM框架,直接配置一对多关联关系,查询时通过关联查询语法可直接返回拼接好的结构,无需手动查两次。

内容的提问来源于stack exchange,提问作者hesam botorabi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:27:03