我有一个原子更新,它通过属性中的最低值查找记录,递增该值,并在一个查询中返回结果。
如果我在SQL Server中,我会在事务中使用DECLARE和SET并执行多个查询,但这个postgres DO语法对我来说是煎饼。
我看到DO $$DECLARE r record;
这是一个好的开始,但我可以设置或通过其他方式为该变量分配一条记录吗?
在Mongo:
this.findOneAndUpdate(
{ active: true },
{ $inc: { userCount: 1 } },
{ sort: { userCount: 1 } }, // grab the lowest count for update
cb
);
在SQL Server中我会做这样的事情:(男人已经有一段时间......)
declare @id int
begin
set @id = select top 1 id
from foos
where active = 1
order by userCount desc
update foos
set userCount = userCount + 1
where id = @id
select foos
where id = @id
end
答案 0 :(得分:3)
不需要do语句...使用带有返回子句的普通更新语句,例如:
update foos
set userCount = userCount + 1
where id = (
select id
from foos
where active = 1
order by userCount desc
limit 1
)
returning *