首页 > 解决方案 > 猫鼬中的补丁(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来停止查询。

标签: javascriptnode.jsexpressmongoose

解决方案


只需写下您要更改的字段和新值,用逗号分隔即可。

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 }
  );

推荐阅读