当我点击 HTML 文件中的“删除任务”时,我想删除包含相关 _id 和电子邮件的文档。
以下是删除该任务的代码: 我已将电子邮件和 _id 的值(仅十六进制字符串值)传递给代码:
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 匹配。有修复吗?
最佳答案
如果您要与 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());
关于node.js - 无论如何都无法删除传递了 "email"和 "_id"的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34196277/