我试图通过对数据库中的文档进行计数,并使用该数字来创建_id(假设第一个_id为0)来为我的Mongoose模型动态创建_id。但是,我无法从值中设置_id。这是我的代码:
//Schemas var Post = new mongoose.Schema({ //_id: Number, title: String, content: String, tags: [ String ] }); var count = 16; //Models var PostModel = mongoose.model( 'Post', Post ); app.post( '/', function( request, response ) { var post = new PostModel({ _id: count, title: request.body.title, content: request.body.content, tags: request.body.tags }); post.save( function( err ) { if( !err ) { return console.log( 'Post saved'); } else { console.log( err ); } }); count++; return response.send(post); });
我尝试了多种设置_id的方法,但是它对我不起作用。这是最新的错误:
{ message: 'Cast to ObjectId failed for value "16" at path "_id"', name: 'CastError', type: 'ObjectId', value: 16, path: '_id' }
如果您知道发生了什么事,请告诉我。
您要么需要将该_id属性声明为架构的一部分(将其注释掉),要么使用该_id选项并将其设置为false(您正在使用该id选项,该选项会创建一个虚拟的getter强制_id转换为字符串,但仍创建了_idObjectID属性,因此会出现投放错误)。
_id
false
id
所以这:
var Post = new mongoose.Schema({ _id: Number, title: String, content: String, tags: [ String ] });
或这个:
var Post = new mongoose.Schema({ title: String, content: String, tags: [ String ] }, { _id: false });