小程序
小游戏
企业微信
微信支付
扫描小程序码分享
- 当前 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。
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
经分析,反馈中的情况可能是这样出现的,数据库权限设置为 “仅创建者可写,所有人可读”,set 操作更新了一条 不属于 同一个 openid 的数据,比如 数据的实际 {_id: "12345", _openid: "12345"},更新这条数据的用户 { _openid: "abced"}。按数据库的安全规则,用户 "abced" 无法查询到 {_id: "12345", _openid: "12345"} 的数据。这样在 upsert 的模式下,数据库会尝试数据写入,但是 {_id: "12345"} 是存在的并且要求是唯一的,所以会报出以上错误。
请按以上逻辑检查下是否更新了无写权限的数据,并根据实际情况优化程序逻辑,比如不使用 upsert: true。