【发布时间】:2021-09-19 23:07:15
【问题描述】:
以下查询使用索引删除条目:
const deleteGameQuery = `
update users
set games = games - 1
where username = $1
`
如果我将索引作为参数传递,则不会删除任何内容:
const gameIndex = rowsCopy[0].games.findIndex(obj => obj.game == gameID).toString();
const deleteGameQuery = `
update users
set games = games - $1
where username = $2
`
const { rows } = await query(deleteGameQuery, [gameIndex, username]);
ctx.body = rows;
gameIndex 参数只是一个字符串,就像我键入它一样。那么为什么它似乎没有读取值呢?这是不允许的吗?
游戏栏目为jsonb数据类型,数据如下:
[
{
"game": "cyberpunk-2077",
"status": "Backlog",
"platform": "Any"
},
{
"game": "new-pokemon-snap",
"status": "Backlog",
"platform": "Any"
}
]
【问题讨论】:
-
查询的结果是什么?该语句看起来不错,因此 $1==0 或 $2 不包含确切的用户名。如果 rows==0 表示 $2 不在表中。如果 rows>0 则意味着 $1==0。
-
@Vicctor 结果为 []。我什至将参数硬编码为“1”并且仍然相同。你可以从截图here看到他们在数据库中。
-
@Schwern 帖子中的第一个查询确实使用给定的索引号删除了数组内的对象,我对其进行了测试。
-
@George 这是重要的部分:游戏中有什么。如果您在帖子中明确说明,您将得到答案。
-
@Schwern 已编辑,谢谢。是的,它通过索引删除,这很棒,但我希望能够将索引作为参数传递,因为每次都不会是相同的索引,请参阅第二个代码块。
标签: postgresql parameters node-postgres