关于database的具体数值查询问题

本人想在数据库中提取某个人的某个字段的值
曾经尝试过以下n种方式,但凡能输出点有用的东西都行可惜以下方式得出的结果都是清一色的undefined或者[object, Object]
id=await ctx.database.get(‘binding’, {pid:[session.userId]})
id=await ctx.database.get(‘binding’, {pid:[session.userId]}).xxxid
id=await ctx.database.get(‘binding’, {pid:[session.userId]}).pid
id=await ctx.database.get(‘binding’, {pid:[session.userId]}).json
id=await ctx.database.get(‘binding’, {pid:[session.userId]}).json()
id=await ctx.database.get(‘binding’, {pid:[session.userId]}, [“xxxid”])
id=await ctx.database.get(‘binding’, {pid:[session.userId]}, [“xxxid”])[0]
id=await ctx.database.get(‘binding’, id=1).xxxid
关于id,前后id:number, var id, const id全都试过了
鬼知道文档里面先说输出数组后面说输出数据行到底输出什么辣
弄了一个半小时都在输出undefined遂有些崩溃,故来请教各位大神,也是提前先感谢惹
比较好笑的是我一年半前搞的插件做这方面就做的很顺利(我有玉玉症)

1 个赞

= (await ctx…get…)[0]

1 个赞

(悄悄发个自己写的备忘示例)
https://github.com/WhySoRed/koishi-fei-database-example/blob/a419c06012527876dade969f063fb1366bf98fc5/src/index.ts#L114

1 个赞

问题中倒数第二个就是这么写的
嗯 我回头再试试 应该是我哪里写错了

1 个赞

如果是[Obejct]那是正常的吧,说明这是一个对象,你把他console.log出来看看

1 个赞

console.log(await ctx.database.get(‘binding’, {pid: session.userId}))

1 个赞

有点区别喔
要把await外面括号括起来

(await 这样这样)[0]

await 这样这样[0]

是不一样的

1 个赞

如果是挑元素出来是undefined,整体log出来是[object Object],问题里面有说过惹qwq

1 个赞

好狡猾啊xwx

1 个赞

草,我都没发现没有括号

1 个赞

刚刚试了下
let originalid=(await ctx.database.get(‘binding’, {pid:[session.userId]}))[0]
已经括号括住了 但是 log originalid的时候仍然报了TypeError: Invalid content: [object Object]
问题是 binding这个数据库中,用户的userId就是pid,所以一定能找到这个元素,也能选出[0],但是还是报错了
顺带一提 不知道为什么ctx.database和ctx.model这两个数据库有关的在VSC里面显示红线,build无法完成 但是能在dev跑。

我去查了一下这个报错的def,是这样的:!isNullable(content)->throw error [type]
说明[object Object]已经是[0]的元素了,表示的是第一个数据行,而我之前认为的应该是因为只有一个数据行所以是一维数组是错误的,因此我个人认为正确打开方式应该是:[0][0]

但是我输出这个元素的时候又变成undefined了,终于在尝试输入[0].pid的时候,成功输出了session.userId。

问题解决了 既不是少了个括号 也不能直接console.log,因为是二维数组 一说到这个我就想起来一年半前也是被这个二维数组卡了半天 实在是可喜可贺 也建议在官方文档说一下怎么返回元素。

2 个赞

感觉楼主需要了解一下如何使用console.log

1 个赞

我错了哥哥别拷打我
我确实不是代码高手xwx

1 个赞