在Mongoose上执行#查询后如何处理删除的文档



我正在删除从一个param(在本例中称为slug)的数组中找到的文档:

const selected = ['abc_1', 'aaa_2', ...]
MyModel.remove({'slug': { $in: selected }}, (err, data) => {
  if (err || data === null){
    next(err)
  }
  res.json(data)
});

问题:

想要像在findOneAndRemove()回调中使用doc参数一样保留删除的Objects,即:

如果new: false则应用更新之前的文档或者如果new = true则应用更新之后的文档。


自定义解决方案(使用承诺

这个解决方案有效,但我发现脏而且有点冗长(因为,我认为,执行两次类似的查询):

const selected = ['abc_1', 'aaa_2', ...]
MyModel.find({'slug': { $in: selected }})
  .then(orig => {
    MyModel.remove({'slug': { $in: selected }}, (err, data) => {
      if (err || data === null){
        next(err);
      }
      console.log('Array of Objects deleted recently:', orig);
      res.json(data)
    });
  })

问题

由于remove()回调似乎返回了一个包含result.n(数量)等信息的result对象,而不是原始文档Object s,有更好/正确的方法来处理这种情况吗

一个可能的改进是使用id删除文档。它应该更快。

const selected = ['abc_1', 'aaa_2', ...]
MyModel.find({'slug': { $in: selected }})
  .then(orig => {
    const ids = orig.map(o => o._id);
    MyModel.remove({'_id': { $in: ids }}, (err, data) => {
      if (err || data === null){
        next(err);
      }
      console.log('Array of Objects deleted recently:', orig);
      res.json(data)
    });
  })

最新更新