node.js - Nodejs 猫鼬 | findOneAndUpdate 无法正常工作
问题描述
我正在使用 express.js 和带有 mongoose 模块的 mongodb 来处理节点 js 应用程序来处理数据库。
在一种情况下,我需要languages
使用findOneAndUpdate
方法更新用户属性。这个属性是一个对象数组应该看起来像[{"language":"Ar","level":4}]
当我使用以下 nodejs 代码更新它时:
User.findOneAndUpdate({_id:mongoose.Types.ObjectId(req.body.id)},
{$set:{[req.body.key]:req.body[req.body.key]}},(err,doc)=>{
console.log(req.body) // {id:5d1619fa7c11fa102210ef86,"languages":[{"language":"Ar","level":4}],key:"languages"}
if (!err) {
res.json(200,doc);
}else{
res.json(500,{error:err});
}
})
我得到以下结果
但是当我从 mongo shell 尝试同样的事情时
db.users.findOneAndUpdate({"_id" : ObjectId("5d1619fa7c11fa102210ef86")},{ '$set': {"languages":[{"language":"Ar","level":4}]} })
我得到正确的结果
这是正确的预期结果。
知道为什么 nodejs 片段无法正常工作。提前致谢。
解决方案
我认为更新成功运行后您没有得到更新的结果。您需要将new : true
更新查询作为第三个参数传入。
默认情况下mongodb
返回 之后的旧文档update
,但您可以指定在查询中返回更新后的文档。
尝试这个 :
User.findOneAndUpdate({_id:mongoose.Types.ObjectId(req.body.id)},
{$set:{[req.body.key]:req.body[req.body.key]},{new:true},(err,doc)=>{
...
//doc will be updated doc here
})
推荐阅读
- java - 使用递归的 Reve 谜题的最优解
- html - ::-webkit-calendar-picker-indicator 在 Android 上不起作用
- javascript - 在vue中更改arcgis地图位置
- llvm - 如何从 MachO 二进制文件中提取 __bitcode/__bundle 部分
- swift - 当快照侦听器生效时,Tableview Like 按钮会重复
- python - 如何根据预先确定的兑换率兑换货币?(Python)
- rust - “如果让”和“如果”之间有区别吗?
- jmeter - 重复执行异步调用的请求,直到它在 JMeter 中遇到正确的响应
- angular - Intellij Ultimate 2020.1 中的 Angular 断点
- javascript - 我怎样才能让它显示这个元素的底部?(HTML、CSS、JS)