node.js - 无论如何都无法删除传递了 "email"和 "_id"的文档

标签 node.js mongodb express

当我点击 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/

相关文章:

node.js - 如何检测 NodeJS 中的文件编码?

c++ - MongoDB 服务器和 Mongo C++ 驱动程序之间的兼容性

javascript - 向模板实例变量传递方法调用结果时出现异常

node.js - 使用 Node 将 token 保存在本地存储中

javascript - stripe.js : api call that calls stripe. Charges.create 未返回响应

node.js - Electron/NodeJS 和应用程序在 setInterval/async 代码上卡住

javascript - 从 NodeJS 发送数据而不重新渲染整个页面?

javascript - 捕获拒绝的 promise 并将其通过错误代码解决后有任何问题吗?

node.js - 阻止 Mongoose 为子文档数组项创建 _id 属性

node.js - 我是否必须使用 ngrok 来公开 MERN 堆栈的前端和后端才能使 CRUD 操作正常工作?