MongoDB中remove()、findOneAndDelete()和deleteOne()的区别

45

在Express和MongoDB中,我想通过ID删除文档。findOneAndDelete()不能通过_id删除,只能通过字段进行删除!为什么?

db.collection('quotes').findOneAndDelete({name: req.body.name}, (err, result) => {
    if (err) return res.send(500, err)
  })

var ObjectId = require('mongodb').ObjectId;
  var collection = db.collection('quotes');
  collection.remove({_id: new ObjectId(req.body.id)}, function(err, result) {
      if (err) {
          console.log(err);
      } else {
          res.send('A darth vadar quote got deleted')
      }
  });

  var mongodb = require('mongodb');
  db.collection('quotes', function(err, collection) {
    collection.deleteOne({_id: new mongodb.ObjectID(req.body.id)});
  });

三个函数的不同之处?
1个回答

118
简言之:
  • findOneAndDelete()在删除一个文档后返回被删除的文档(如果您需要在删除操作后查看其内容);
  • deleteOne()用于删除单个文档;
  • remove()是已废弃的函数,已被deleteOne()(用于删除单个文档)和deleteMany()(用于删除多个文档)所取代。

findOneAndDelete()应该可以通过_id进行删除。


1
非常干净的答案,如果只进行删除操作,推荐使用哪一个? - Hidayt Rahman
2
@HidaytRahman deleteOne(用于单个文档)或deleteMany(用于多个文档) - robertklep
@robertkelp 謝謝你。這意味著我們不應該使用“findOneAndDelete()”。 - Hidayt Rahman
由你决定,如果需要在删除后记录,请使用findOneAndDelete()。 - Ashish Saini
感谢您提供这个简短而精炼的答案。 - Japsimrans13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接