无法删除已通过"电子邮件"和" _id"无论如何

时间:2015-12-10 07:44:12

标签: node.js mongodb express

当我点击"删除任务"我想删除涉及_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相匹配。任何修复?

1 个答案:

答案 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());