javascript - 猫鼬中的补丁(findByIdAndUpdate)
问题描述
我必须在 Node/Mongoose API 中做一个简单的 CRUD。我还必须制作put
并且patch
在做补丁时,我有点困惑,因为我想使用findByIdAndUpdate
方法,但正如我在示例中看到的那样,只有一条记录更新,例如{name: "newName"}
. 我想知道如果我想更新两个单元格应该怎么做?
我的架构:
const userSchema = new Schema({
login: String,
email: String,
registrationDate: Date,
});
我的补丁代码:
router.patch('/:id', async (req, res) => {
const id = req.params.id;
User.findByIdAndUpdate(id, { ??? },
function (err, docs) {
if (err){
console.log(err)
}
else{
console.log("Updated User : ", docs);
}
});
});
我不知道我应该在“???”中写什么,因为如果我只想更新登录名怎么办,如果我想更新姓名和电子邮件怎么办?也许我错了,PATCH
仅用于编辑一个单元格,在其他情况下我应该使用PUT
?
编辑:
我使用这样的东西使它工作:
router.patch('/:id', async (req, res) => {
const id = req.params.id;
let updates={}
if (req.body.login) {
updates["login"] = req.body.login
}
if (req.body.email) {
updates["email"] = req.body.email
}
if (req.body.registrationDate) {
updates["registrationDate"] = req.body.registrationDate
}
User.findByIdAndUpdate(id, updates,
function (err, docs) {
if (err){
console.log(err)
}
else{
console.log("Updated User : ", docs);
}
});
});
无论如何,我有一个问题,我应该怎么做才能“停止”这个动作。我正在使用HTTPie
,当我写http PATCH......时,似乎我不能写任何其他东西,因为它仍然有效,我需要做CTRL+C来停止查询。
解决方案
只需写下您要更改的字段和新值,用逗号分隔即可。
const id= req.params.id;
const email = "newemail";
const date = "1991/13/01";
const user = await User.findByIdAndUpdate(
{
_id: id,
},
{ email, registrationDate: date},
{ upsert: false }
);
推荐阅读
- python - Python速成课程外星人入侵运动
- php - 在 PHP 中删除和重命名
- c - 为什么 linux 内核中的 bitops 性能比我的慢?
- r - 通过向量自回归模型预测多元数据
- c# - 检测导航事件 blazor webassembly
- pandas - KeyError:“[索引([...])都没有在[列]中
- css - 如何在css中自动动画文本突出显示?
- python - 当条件匹配时仅使用 Python 中的 csv 包更新单元格值
- python - 如何从基于 LSTM 的自动编码器中获取潜在空间表示?
- bash - Tar 在 bash 中的每个反斜杠前面添加了额外的反斜杠