Mongoose:在新创build的对象上设置值后,投射到ObjectId的值失败
尽pipe这已经被多次询问,通常是因为实体没有有效的ObjectId。
我遇到了ObjectId被设置为一个值可以被转移到ObjectId,但仍然得到这个错误的情况。
scheme:
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:000000000000000000000001,_id:55079a90286f49280364f78b} {[CastError:投射到ObjectId在path“serviceName”的值“some Name”失败]
请注意, serviceName可以转换为ObjectId,但是mongoose使用提供给构造函数的值而不是之后设置的值。
使用logging的设置function导致相同的错误:
serviceFromDB.set('serviceName','000000000000000000000001');
这是更新或插入实体的代码,以便稍后设置字段。 解决scheme是在不传递参数的情况下创build服务实例:
serviceFromDB=new Service();
为此打开了一个问题 ,因为它是一个文档/实体的非常不直观的行为,即使稍后重新设置,也可以使用构造函数中设置的值。
解决scheme是在不传递参数的情况下创build服务实例:
serviceFromDB=new Service();
- SQL Server实时推送通知到Node.JS
- cursor.toArray()返回一个promise而不是array
- node.js mongodb – collection.find()。toArray(callback) – callback不会被调用
- 在安装mongoose-auto-increment和mongoose-simpledb时,npm错误代码EPEERINVALID
- 限制下载次数
- 为什么当我运行POST请求时,它不会返回我在Mongoose模式定义中定义的JSON?
- 如何增加Mongoose中子文档的属性?
- 用于数字列表的mongodb模式数据types(或不含特定大小的数字数组)
- Socket.IO适配器在MongoDB断开连接时抛出不可捕捉的超时错误