尽管这个问题已经被问了很多次,但通常是因为实体没有该字段的有效ObjectId。
我遇到过这样一种情况,即ObjectId被设置为一个可以转换为ObjectId的值,但仍然会出现这个错误。
模式:
var serviceSchema = paramMongoose.Schema({
serviceName:{
type: paramMongoose.Schema.Types.ObjectId
, ref: 'servicenames',required:true
}
});
伪代码:
serviceFromDB=new Service({serviceName:'some Name'});
serviceFromDB.serviceName='000000000000000000000001';
serviceFromDB.save(function(paramError,paramData){
if(paramError){
console.log('but but but...',serviceFromDB,paramError)
}
});
此代码的输出为:
但是但是。。。{serviceName:000000000000000001,_id:55079a90286f49280364f78b}{[CastError:在路径“serviceName”处对值“some Name”强制转换为ObjectId失败]
请注意,serviceName可强制转换为ObjectId,但mongoose使用提供给构造函数的值,而不是之后设置的值。
使用记录的set函数会导致相同的错误:
serviceFromDB.set('serviceName','000000000000000000000001');
这是更新或插入实体以便稍后设置字段的代码。解决方案是在不传递参数的情况下创建服务实例:
serviceFromDB=new Service();
为此打开了一个问题,因为文档/实体使用构造函数中的值集是非常不直观的行为,即使以后重新设置了它。
解决方案是在不传递参数的情况下创建服务实例:
serviceFromDB=new Service();
当我尝试更新DB中的文档时,发生了一些错误。 以下是模式: 然后我从其他地方得到一些产品: 并更新Mu文档。请注意,我为“描述”设置了一个条件:如果它有空值,它将被更新——否则它将保持不变: } Go update(我使用mongoose):产品。updateOne({name:some_product.name},newProduct,{some params}) 我看到: 对于路径“descr
我正在用node/express/mongo/mongoose构建一个应用程序。我遇到了一个我似乎无法理解的错误,谷歌搜索到目前为止没有任何帮助。 我创建了一个简单的、以猫为主题的示例来重现我遇到的错误。我基本上是通过ObjectId检索一个对象。我正在使用创建对象时自动生成的对象id(作为字符串)。 当我导航到路径localhost:3000/kitty/586d62878fc14d30e0ac
好吧,我看到这里有一些这样的帖子,但他们没有帮助我。。。 让我描述一下我的问题: 我有两个模式 现在我已经有了一个B对象,我想创建一个a对象。 所以我这样做: b对象是从我的monogDB加载的。调试器为我的b显示了一个有效的ObjectId(53627ed535d9d04416e26218或Sb~Õ5ÙÐDáb)。 但是,当我保存新的A-Object时,会出现错误:“CastError:Cast
当向发送请求时,并且不存在带有的文档,为,并且返回: 但是,当与Mongoose期望的“格式”(我想)不匹配时(例如会返回一个奇怪的错误: CastError:对于路径“\u id”处的值“foo”,转换为ObjectId失败。 那么这个错误是什么?
我试图在一个MEAN堆栈应用程序中处理一个计划。当我调用findOne时,我得到了这个错误: 我就是这样做的: 我注意到,当我把id作为一个字符串(如下所示)时,一切正常。 所以,我控制台: 我一直在尝试我在这里找到的东西,但任何东西都可以帮助我解决这个问题:/
我不熟悉node。js,所以我有一种感觉,这将是我忽略的愚蠢的事情,但我还没有找到解决我问题的答案。我要做的是创建一个路径,该路径将创建一个新的子对象,将其添加到父对象的子对象数组中,然后将子对象返回给请求者。我遇到的问题是,如果我将字符串id传递给findById,节点就会崩溃 对象{}没有方法cast 如果我试图传递一个对象,我会得到 CastError: Cast to ObjectId失败