Mongoose model deleteOne()仅适用于硬编码字符串



我有一个奇怪的错误与mongoose deleteOne()函数。今天我想在我的项目上工作,并得到了一个错误,而从一个集合中删除一个项目。它只是不删除文档,直到我为options对象使用硬编码参数,如下所示:

const { deletedCount } = await Model.deleteOne({symbol: 'hardcoded'})
// results in deletedCount = 1

但是如果我尝试使用动态字符串,比如:

const test = 'dynamic'
const { deletedCount } = await Model.deleteOne({symbol: test})
// results in deletedCount = 0

它不再从我的集合中删除文档。奇怪的是,昨天它还可以正常工作,并删除了该项目。

我尝试了另一件事,我读到关于deleteOne()的错误:

const { deletedCount } = await Model.deleteOne({symbol: JSON.stringifiy(symbol)})

但这也不行。

有谁知道出了什么问题吗?

只要可能,我总是默认使用id,以确保给定操作的目标数据没有错误。在这种情况下,这意味着用findByIdAndDelete()代替。如果我不知道我试图删除的文档的id,那么只有我使用findOneAndDelete()deleteOne(),就像你一样,用id以外的东西来标识我正在寻找的文档。

你确定传递给函数的键值对存在于数据库中吗?

问题解决。我不小心在字符串的末尾添加了一个额外的空格字符。这是非常奇怪的,因为这个错误从我的项目开始就存在,昨天它工作了。

所以对于每个可能有类似问题的人:

我有一个ejs模板文件,我渲染一个html元素,像这样:

<div id="<%= symbol %> ">

然后在请求服务器从列表中删除一个项目的事件处理程序中,我使用id属性作为主体中的请求参数。在路由处理程序中,此参数传递给mongoose:

const { symbol } = req.body
const { deletedCount } = await Model.deleteOne({ symbol })

正如我提到的。在最后一个ejs分隔符之后的模板文件中,有一个导致错误的额外空格字符。我通过复制monogse查询发现了这个问题,然后将其记录到控制台。在这里,我可以看到错误的条件参数。

相关内容

  • 没有找到相关文章

最新更新