nodejs mongodb不基于id删除

时间:2016-08-31 10:16:38

标签: javascript node.js mongodb

你能帮我解决一下这段代码吗?当我运行此网址时,此代码不会从MongoDB中删除值:http://localhost:3000/delete/57c6713455a6b92e105c5250

我收到此回复:{"lastErrorObject":{"n":0},"value":null,"ok":1},但没有删除。

app.get('/delete/:id', (req, res) => {
   var uid = req.params.id;
   db.collection('quotes').findOneAndDelete({'_id': uid}, (err, result) => {
      if (err) return res.send(500, err);
      res.send(result);
   }); 
});

3 个答案:

答案 0 :(得分:4)

在MongoDB中,您使用_id构造函数而不是ObjectId的字符串查询文档ID(ObjectId)。因此查询需要是:{ '_id': ObjectId(uid) }

实施例

var mongoClient = require('mongodb').MongoClient;    

//Include ObjectId
var ObjectId = require('mongodb').ObjectID;

mongoClient.connect("Your connection string", function(err, db) {
   var query = {
      _id: ObjectId("id_string") // Important to notice
   };
   var collection = db.collection('your collection');

   collection.find(query, function(err, docs) {
       console.log(err, docs);
   });
});

建议

//Include ObjectId
var ObjectId = require('mongodb').ObjectID;

app.get('/delete/:id', (req, res) => {
   var uid = req.params.id;

   //Add object id to query object
   db.collection('quotes').findOneAndDelete({'_id': ObjectId(uid)}, (err, result) => {
      if (err) return res.send(500, err);
      res.send(result);
   }); 
});

答案 1 :(得分:1)

是。谢谢你我想我错了。见下面的正确答案。

var ObjectId = require('mongodb').ObjectID;
app.get('/delete/:id', (req, res) => {
var uid = req.params.id;
db.collection('quotes').findOneAndDelete({'_id': ObjectId(uid) }, (err, result) => {
if (err) return res.send(500, err);
res.send(result);
}); 
});

答案 2 :(得分:0)

此响应表示您的查询正常执行"确定":1,但查找查询无法找到任何要删除它的文档。

所以在使用" findOneAndDelete"之前仅使用" findOne"并记录响应,以检查你是否有天气。