mondoose deleteOne()函数出现了一个奇怪的错误。今天我想处理我的项目,但在从集合中删除一个项目时遇到了一个错误。它只是不删除文档,直到我为选项对象使用了一个硬编码参数,如下所示:
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)})
但这个也不管用。
有人知道出了什么问题吗?
2条答案
按热度按时间2admgd591#
我总是默认使用id,以确保给定操作的目标数据没有错误,所以在这种情况下,这意味着使用
findByIdAndDelete()
代替,如果我不知道我试图删除的文档的id,那么我只会使用findOneAndDelete()
或deleteOne()
,就像您所做的那样,除了ID之外的东西来识别我要找的文件。您确定要传递给函数的键-值对存在于数据库中吗?
k97glaaz2#
问题解决了。我不小心在字符串的末尾添加了一个额外的空格字符。这非常奇怪,因为错误从我的项目开始就存在,昨天它起作用了。
所以对于每个可能有类似问题的人:
我有一个ejs模板文件,在其中我呈现了一个html元素,如下所示:
然后,在请求服务器从列表中删除一个项目的事件处理程序中,我使用id属性作为正文中的请求参数,在route处理程序中,这个参数被传递给mongoose:
正如我所提到的,在模板文件中,在最后一个ejs分隔符之后有一个额外的空格字符导致了这个错误。我通过复制monoogse查询并将其记录到控制台来发现这个问题。在那里我可以看到错误的条件参数。