当我点击"删除任务"我想删除涉及_id和电子邮件的文档。在HTML文件中。
以下是删除该任务的代码: 我已经将电子邮件和_id的值(只有hexadcemial字符串值)传递给代码:
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"的值变量是566836bd8db43d3d56e23a4a
,即只有来自_id的字符串值:
ObjectId("566836bd8db43d3d56e23a4a")
var taskid=566836bd8db43d3d56e23a4a;
我已经尝试了每个可能的taskid声明来转换它,以便函数可以识别_id的值并匹配它:
var taskid= "ObjectId("+'"'+req.param('taskid')+'"'+")";
但到目前为止,我无法将_id与taskid相匹配。任何修复?
答案 0 :(得分:2)
如果您要与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();
});
应该适合你。
如果您觉得每项查询的工作都太难了,那么您可以创建一个新方法。
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());