繁体   English   中英

MongoDB 如何在 deleteMany 中捕获错误

[英]MongoDB How to catch errors in deleteMany

我查看了deleteMany()的 MongoDB 文档,但似乎它抛出的唯一错误是WriteConcernError

我正在使用 Insomnia 来提出我的请求。

这是我的要求:

DELETE HTTP://localhost:5000/api/users/delete/usernames?usernames=["a","b","c"]

如您所见,我在查询字符串中有一个数组,所以我将它传递给我的 function

@user.controller.js

function _deleteByUsernames(req, res, next) {
    userService.deleteByUsernames(JSON.parse(req.query.usernames))
        .then(() => res.status(200).json({"message": "User(s) successfully deleted!"}))
        .catch(err => next(err));
}

@user.service.js

async function _deleteByUsernames(usernames) {
    try {
        console.log(usernames);
        await User.deleteMany({username: {$in: usernames}});
    } catch (err) {
        throw err;
    }
}

我知道没有用户名为abc的文档,但deleteMany()不会返回任何错误,例如“找不到给定参数”等。

因为我不想回复“用户已成功删除”。 如果有一个错误,我怎么能抓住这个错误。 或者我应该如何处理?

我认为没有找到参数没有错误。 我不知道这总比没有好。 我不会将此标记为已回答,因为我认为这不是答案

async function _deleteByUsernames(usernames) {
    return await User.deleteMany({username: {$in: usernames}})
        .then(result => {
            console.log(result);
            return (result.deletedCount === 0 ? 
                "None of the selected user(s) deleted!": 
                (result.deletedCount !== usernames.length ? 
                `${result.deletedCount} out of ${usernames.length} selected user(s) successfully deleted!`: 
                "All selected user(s) successfully deleted!"))
        })
        .catch(err => {
            return `Delete failed with error: ${err}`;
        })
}

您可以将您的功能更改为以下,

@user.controller.js:

  • 将 async/await 放入 function 中,并在 try/catch 块中添加代码,并将res作为参数传递给 service function deleteByUsernames
async function _deleteByUsernames(req, res, next) {
    try {
        await userService.deleteByUsernames(res, JSON.parse(req.query.usernames));
    } catch (err) {
        next(err);
    }
}

@user.service.js:

deleteMany() ,这个 function 调用 MongoDB 驱动程序的Collection#deleteMany() function。 返回的 promise 解析为包含 3 个属性的 object:

ok : 1 如果没有发生错误

deletedCount : 删除的文档数

n :删除的文档数。 等于deletedCount。

async function _deleteByUsernames(res, usernames) {
    let response = await User.deleteMany({ username: { $in: usernames } });
    // ERROR
    if (response.ok != 1) {
        res.status(400).json({ "message": "User(s) not deleted, Something want wrong!" });
    }
    // SUCCESS 
    else {
        res.status(200).json({ 
          "message": `${response.deletedCount} User(s) successfully deleted out of ${response.n}"
        });
    }
}

代码未经测试,您可以解决方法,看看会发生什么!

您可以将删除结果保存在变量中并检查错误

async function _deleteByUsernames(usernames) {
try {
    console.log(usernames);
    let userDeleteResult = await User.deleteMany({username: {$in: usernames}});
    if(!userDeleteResult ){
      res.json({status: false, error: 'Some error'}) // or pass the error object here
    }
   } catch (err) {
    throw err;
  }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM