我试图通过统计数据库中的文档数量来动态地为Mongoose模型创建_id,并使用该数字来创建_id(假设第一个_id为0)。然而,我无法从我的值中获取要设置的_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' }
型
如果你知道发生了什么事,请告诉我。
5条答案
按热度按时间lp0sw83n1#
您需要将
_id
属性声明为schema的一部分(您已将其注解掉),或者使用_id
选项并将其设置为false
(您使用的是id
选项,该选项创建了一个虚拟getter以将_id
转换为字符串,但仍然创建了_id
ObjectID属性,因此会出现转换错误)。所以要么这样:
字符串
或者这个:
型
kzmpq1sx2#
@robertklep的第一段代码对我不起作用(mongoose 4),还需要禁用
_id
字符串
这对我很有效
tpgth1q73#
在mongoose中创建custom _id并将其保存为mongo _id。在保存文档之前使用mongo _id。
字符串
f2uvfpb94#
当我为模式保存新数据时,这对我很有效。
字符串
t1rydlwq5#
下面是我正在做的。我只是添加了一个前保存钩子来设置_id字段。
字符串