Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – Mongoose:CastError:Cast到ObjectId在路径“_id”处的值“[object Object]”失败大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是node.js的新手,所以我有一种感觉,这将是一个愚蠢的,我忽略了,但我还没有找到一个解决我的问题的答案。我想要做的是创建一个路径,创建一个新的子对象,将其添加到父的子数组中,然后将子对象返回给请求者。我遇到的问题是,如果我将字符串id传递到findById,则节点将崩溃

如果我尝试传递一个ObjectId,我会得到

以下是我的代码的大纲:

var mongoose = require('mongoose');
var scheR_734_11845@a = mongoose.scheR_734_11845@a;
var ObjectId = scheR_734_11845@a.objectId; //Have also tried scheR_734_11845@a.Types.ObjectId,mongoose.objectId

mongoose.connect('mongodb://user:password@server:port/database');

app.get('/myClass/:Id/childClass/create',function(request,result) {
  var id = new ObjectId(request.params.Id);
  MyClass.findById(id).exec( function(err,myClass) {
    if (err || !myClass) { result.send("error: " + err + "<br>" + JSON.Stringify(id) || ("object '" + request.params.Id + "' not found: " + id)); return; }
    var child = ChildClass();
    myClass.Children.addToSet(child);
    myClass.save();
    result.send(child);
  });
});

如果我使用路径“/ myClass / 51c35e5ced18cb901d000001 / childClass / create”执行此代码,则这是代码输出

我尝试使用findOne并传递{_id:iD},但这似乎正是findById所做的。我已经尝试过我在其他网站上看到的ObjectId的不同类。我尝试像一个函数@L_450_15@ObjectId(),而不是一个构造函数并返回undefined。在这一点上,我的想法不足,似乎没有一个答案的帮助。关于我在做什么错误的任何想法?

另外,像我说的那样,我是新来的节点/ Mongo / Mongoose / Express,所以如果有更好的方法来完成我的目标,请让我知道。我感谢所有的反馈。

编辑:

在彼得·里昂的解决方法之后,我发现另一个错误,我正在进入,并找到findByIdAndupdate,这是按预期的方式工作,正是我希望做的。我仍然不知道为什么findById和findOne给我这样的问题,我很好奇(可能需要提交一个错误报告),所以我会离开这个公开,以防别人有答案。

解决方法

简短的答案:使用mongoose.Types.ObjectId。

@H_942_5@mongoose(但不是mongo)可以接受对象Ids作为字符串,并为您正确地“投射”,所以只需使用:

@H_881_13@myClass.findById(req.params.id)

但是,请注意,如果req.params.id不是mongo ID字符串的有效格式,则会抛出必须捕获的异常。

所以主要的困惑是Mongoose.scheR_734_11845@aTypes的东西你只能在定义mongoose模式时使用,而mongoose.Types有创建要存储在数据库查询对象中的数据对象时使用的东西。所以mongoose.Types.ObjectId(“51bb793aca2ab77a3200000d”)的工作原理,将给你一个可以存储在数据库中或在查询中使用的对象,如果给定一个无效的ID字符串,它将抛出一个异常。

findOne接受查询对象,并将单个模型实例传递给回调。而findById是字面上的findOne({_ id:iD})(see source code here)的包装器。只需查找一个查询对象,并将匹配的模型实例的数组传递给回调。

慢走这是令人困惑的,但我可以保证你在这一点上变得困惑,不会在猫头鹰中发现错误。这是一个非常成熟的图书馆,但需要一些时间才能得到它。

在您的代码段中看到的另一个可疑的事情是在实例化ChildClass时不使用新的。除此之外,您需要发布架构代码,以便我们帮助您降低任何仍然存在的CastErrors。

大佬总结

以上是大佬教程为你收集整理的node.js – Mongoose:CastError:Cast到ObjectId在路径“_id”处的值“[object Object]”失败全部内容,希望文章能够帮你解决node.js – Mongoose:CastError:Cast到ObjectId在路径“_id”处的值“[object Object]”失败所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。