如何在Mongoose上执行#query后处理删除的文件?

时间:2016-07-20 09:55:57

标签: node.js mongodb express 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)
});

问题:

希望保留已删除 Objects,例如在doc回调中使用findOneAndRemove() param所发生的情况,即:

  

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

自定义解决方案(使用 Promises

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

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对象,其中包含result.n(数量)等信息,但原始文档Object 不存在处理这种情况的更好/正确方法?

1 个答案:

答案 0 :(得分:0)

一种可能的改进可能是使用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)
    });
  })