node.js - 当集合中添加记录时,findbyIdAndUpdate 不起作用
问题描述
我写了一个更新查询,它将通过 _id 找到记录并更新。在我在该集合中添加新记录之前,此代码完全可以正常工作。如果添加一条记录并进行查询,它将进入成功部分,但返回 null 而不是数据。但是当我重新启动代码并尝试相同的操作时,它工作正常。我的方法是 PUT。
accept = (req, res) => {
var query = { _id: req.params.uid };
var updatevalue = { $set: { status: 3 } };
var options = { new: true }
this._model.findByIdAndUpdate(query, updatevalue, options, (err, obj) => {
if (err) {
res.send(err);
}
else {
res.send(obj);
}
});
}
要求
api.abc.com/api/accept/5cfe4dd898fd225ef1cabdsd
解决方案
通常,我们可以通过多种方式更新一条记录
- findOneAndUpdate()方法用于更新集合中的记录。可以使用这种方法,而不是手动查找记录然后更新它。这种方法比手动方法工作得更快。它有一个选项标志
new
,如果为真,它将在响应中返回更新的记录。
User.findOneAndUpdate({_id: id},{$set:{name:user.name}},{new:true}).then((docs)=>{
if(docs) {
resolve({success:true,data:docs});
} else {
reject({success:false,data:"no such user exist"});
}
}).catch((err)=>{
reject(err);
});
- findByIdAndUpdate()方法用于根据 Id 更新记录。我们可以将 id 作为
«Object|Number|String»
_id 的值传递给查询。所以在这里,我们可以直接通过req.params.id
User.findByIdAndUpdate(req.params.id,{$set:{name:user.name}},{new:true}).then((docs)=>{
if(docs) {
resolve({success:true,data:docs});
} else {
reject({success:false,data:"no such user exist"});
}
}).catch((err)=>{
reject(err);
})
推荐阅读
- c++ - Swig 错误:成员函数已定义或声明
- business-intelligence - Business Objects Webi 智能通过外部超链接填充数据
- python-3.x - 如何分离多个机器人的日志
- python - Flask 和 Heroku sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres
- regex - 将相同哈希中的关键元素与正则表达式匹配并将其存储在 HoA 中
- java - 尝试以编程方式在项目下的“资产集合图块”内创建一个空的“资产集合”
- vba - OLEObject 导出到文件路径 - MSACESS
- elasticsearch - 在使用 ElasticSearch 查询进行复杂聚合时需要帮助
- java - TransactionAttribute 不适用于简单的步骤
- javascript - forEach里面的onclick,value参数只指最后一个元素