Mongoose - 删除使用承诺找到的所有文档
Posted
技术标签:
【中文标题】Mongoose - 删除使用承诺找到的所有文档【英文标题】:Mongoose - Remove all documents found using a promise 【发布时间】:2018-05-07 09:12:27 【问题描述】:我正在尝试将 cmets 作为文档而不是模型批量删除,因为我想稍后使用 pre-hook 删除方法。
下面的命令查找多个满足查询的文档,并尝试将每个评论一一删除。全部删除后,如果在它应该捕获它的阶段有任何错误,则调用 next() 函数。
Comment.find('moment': this._id)
.then(((comments) => Promise.each(comments, (comment) => comment.remove()))
.then(next())
.catch(next()));
但是这给了我一个错误并且没有删除评论
"TypeError: (中间值).then 不是函数"
【问题讨论】:
不确定是否相关,但是您应该在 find 上调用 exec 以获得完整的承诺:comment.find( ... ).exec()
。 mongoosejs.com/docs/promises.html
我得到 Promise.each 不是一个函数?
【参考方案1】:
试试这个
.then(() => next())
.catch(() => next()));
或者这个(带有错误处理)
.then(() => next())
.catch(next);
【讨论】:
【参考方案2】:我决定使用原生承诺,我可以使用 Promise.all 来实现这一点
Comment.find('moment': this._id)
.then((comments) =>
Promise.all(comments.forEach((comment) => comment.remove()))
.then(next());
);
【讨论】:
以上是关于Mongoose - 删除使用承诺找到的所有文档的主要内容,如果未能解决你的问题,请参考以下文章
在更新使用 Mongoose 模型检索并作为承诺处理的文档时遇到问题
如何使用带有 Mongoose 和 ES6 承诺的 Graphql 中的 find 来解析多条记录