数据库操作如何对指定的格子插入新内容

啊啊啊写了一天人快疯了
这是我的实例数据库


其中participants的内容为
{"userId":"928967225015160844","username":"itzdrli","avatar":"https://cdn.discordapp.com/avatars/928967225015160844/0d7e5b5a79393e545d76c244ef3f195f.png"}
数据库是这样定义的

declare module 'koishi' {
  interface Tables {
    helpdesk_list: HelpdeskList
  }
}
export interface HelpdeskList {
  id: number
  platform: string
  participants: {
    username: string
    userId: string
    avatar: string
  }
  contents: {
    username: string
    userId: string
    date: string
    message: string
  }
  ticketStatus: string
  creationDate: string
}
ctx.model.extend('helpdesk_list', {
    id: 'unsigned',
    platform: 'string',
    participants: 'json',
    contents: 'json',
    ticketStatus: 'string',
    creationDate: 'string',
  }, {
    autoInc: true,
  })

请问我该如何通过ctx.datebase.create/set/upsert为participants添加第二项内容使其成为类似

0: {
	"userId": "928967225015160844",
	"username": "itzdrli",
	"avatar": "https://cdn.discordapp.com/avatars/928967225015160844/0d7e5b5a79393e545d76c244ef3f195f.png"
}
1: {
	"userId": "1145141919810",
	"username": "idk",
	"avatar": “xxxxxx "
}

的内容
(反正就是怎么做才能让pariticipant里存储多个用户的信息)

3 个赞

之前 梦梦 推荐我使用数据库,后来我使用 json 存数据,也是挺快乐的…

不过需要自己去设计和优化,就挺累…

4 个赞
// 尝试添加生成一个工单 ID,命名为 deskID
const deskID = 'xxxxx';

// 声明 participants 的类型接口
interface Participant {
    userId: string;
    username: string;
    avatar: string;
}

interface Participants {
    [key: number]: Participant;
}

export interface HelpdeskList {
    // ...
    // 工单 ID
    deskID: string;
    // 参与者
    participants: Participants;
}

// 拓展表
ctx.model.extend('helpdesk_list', {
    // ...
    deskID: 'string',
    participants: {type: 'json', initial: {}},
}, {
    autoInc: true,
})

// 根据 deskID 获取工单项目
const [deskRecord] = await ctx.database.get('helpdesk_list', {deskID});

// 获取参与者
const participants = deskRecord.participants;

// 假设 participants 的值为
// participants = {
//     0: {
//         "userId": "928967225015160844",
//         "username": "itzdrli",
//         "avatar": "https://cdn.discordapp.com/avatars/928967225015160844/0d7e5b5a79393e545d76c244ef3f195f.png"
//     }
// }

// 添加一个新的参与者
participants[1] = {
    "userId": "1145141919810",
    "username": "idk",
    "avatar": "xxxxxx"
}

// 更新数据库
await ctx.database.set('helpdesk_list', {deskID}, {participants});
5 个赞