当前位置: 首页 > 知识库问答 >
问题:

Mongoose:设置值[duplicate]后,新创建对象上的值转换为ObjectId失败

屠锐
2023-03-14

尽管这个问题已经被问了很多次,但通常是因为实体没有该字段的有效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();

为此打开了一个问题,因为文档/实体使用构造函数中的值集是非常不直观的行为,即使以后重新设置了它。

共有1个答案

申屠黎昕
2023-03-14

解决方案是在不传递参数的情况下创建服务实例:

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失败