Mongodb 4+中findOneAndUpdate的returnNewDocument参数不生效问题咨询
你遇到的参数不生效问题是不同SDK、不同版本驱动的配置项不兼容导致的,具体原因和解决方法如下:
returnNewDocument是MongoDB Realm SDK专属的配置项,原生Node.js MongoDB驱动不识别该参数,所以配置后无效。- 你使用的4.1版本Node.js驱动已经废弃了3.x版本中的
new: true配置,官方统一替换为returnDocument参数:- 默认值为
before,返回更新前的旧文档 - 配置为
after时返回更新后的新文档
- 默认值为
- 额外注意:4.x版本原生驱动的
findOneAndUpdate接口不会直接返回文档对象,会返回一个包含value字段的结果对象,更新后的文档存放在value属性中。
修改后的可用代码如下:
exports.setEmailKey = async (email, key) => { try { const result = await ucol.findOneAndUpdate( { email:email }, { $set: { email_key: key, email_key_time: getEpoc() } }, { upsert: true, // 替换原来的returnNewDocument配置 returnDocument: 'after', projection: { _id: 1, email: 1, email_key: 1, email_key_time: 1 } } ) // 4.x驱动需要取value字段拿到目标文档 return result.value } catch (e) { log('setEmailKey() Failed', e) return null } }
内容的提问来源于stack exchange,提问作者ChrisAdmin
相关产品推荐
相关产品推荐

