云数据库更新set更新报duplicate key error
- 当前 Bug 的表现(可附上截图)
- 预期表现
- 复现路径
- 提供一个最简复现 Demo
使用的是doc.set这个api,然后报_id duplicate key error
1 回复
经分析,反馈中的情况可能是这样出现的,数据库权限设置为 “仅创建者可写,所有人可读”,set 操作更新了一条 不属于 同一个 openid 的数据,比如 数据的实际 {_id: “12345”, _openid: “12345”},更新这条数据的用户 { _openid: “abced”}。按数据库的安全规则,用户 “abced” 无法查询到 {_id: “12345”, _openid: “12345”} 的数据。这样在 upsert 的模式下,数据库会尝试数据写入,但是 {_id: “12345”} 是存在的并且要求是唯一的,所以会报出以上错误。
请按以上逻辑检查下是否更新了无写权限的数据,并根据实际情况优化程序逻辑,比如不使用 upsert: true。