无论如何都无法删除具有“email”和“_id”的文档

当我点击HTML文件中的“删除任务”时,我想删除一个有关_id和电子邮件的文档。

以下是删除该任务的代码:我已将电子邮件的值和_id(仅hexstring值)传递给代码:

collection.findOneAndDelete({email:email,_id:taskid},function (err, result) { if (err) { console.log(err); } else { console.log("Removed!"); console.log(result); callback(result); } db.close(); }); 

但是,函数不能识别已经通过的_id。 “taskid”variables的值是566836bd8db43d3d56e23a4a即只有来自_id的string值:

 ObjectId("566836bd8db43d3d56e23a4a") var taskid=566836bd8db43d3d56e23a4a; 

我已经尝试了每个可能的taskid声明来转换它,以便该函数可以识别_id的值并匹配它:

 var taskid= "ObjectId("+'"'+req.param('taskid')+'"'+")"; 

但是到目前为止,我无法将_id与taskid匹配。 任何修复?

如果你打算比较ObjectId的话

 var ObjectId = require('mongoose').Types.ObjectId collection.findOneAndDelete({email:email,_id:new ObjectId(taskid)},function (err, result) { if (err) { console.log(err); } else { console.log("Removed!"); console.log(result); callback(result); } db.close(); }); 

应该为你工作。

如果你觉得这项工作太难了,那么你可以创build一个新的方法。

  String.prototype.toObjectId = function() { var ObjectId = (require('mongoose').Types.ObjectId); return new ObjectId(this.toString()); }; // Every String can be casted in ObjectId now console.log('545f489dea12346454ae793b'.toObjectId());