私は、データベース内のドキュメントをカウントし、その数を使用して _id を作成することで、Mongoose モデルの _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' }
何が起こっているのかご存知でしたら、教えてください。
ベストアンサー1
プロパティをスキーマの一部として宣言するか_id
(コメント アウトしました)、_id
オプションを使用して に設定する必要がありますfalse
(オプションを使用するとid
、文字列にキャストする仮想ゲッターが作成されます_id
が、ObjectID プロパティも作成されるため_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 });