如题,在javascript sdk 中increment方法有无对应的decrement方法,好像没找到。
你好,暂时没有decrement方法。
increment(key,-1)这种形式可否实现减一的功能。
嗯,这样也可以。
在不获取原来值的情况下,如何保证increment(key,-1) 大于0
increment 一个负数(js sdk 没有提供的、LeanCloud API 提供的 Decrement 操作等价于 Increment 一个负数)本身不提供保证计数器大于 0 的语义。类似地,increment 一个正数也不提供封顶的语义。
这个功能你需要自行实现,比如:
通过 beforeUpdate 仍然要检索一次,才能得到计数器更新后的值。在客户端处理的话,如果为负数,那么再次添加1的时候,按找你的方法,就会出现计数器数据没有变化的问题。
注意:传入的对象是一个尚未保存到数据库的临时对象,并不保证与最终储存到数据库的对象完全相同,这是因为修改中可能包含自增、数组增改、关系增改等原子操作。https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html#hash1044815112
没错,因为底层不支持,所以没有简洁的方案,需要根据具体的使用场景自行编写相应的处理逻辑。比如 beforeUpdate 拒绝递减后抛出异常,客户端收到这个异常后进行相应的处理。再比如不用云函数,单纯在客户端处理,转换后需要同步到 LeanCloud 后端。
可以看按条件更新对象。AVSaveOption可以搞定。。。。
AVSaveOption