Mongoose で db ドキュメントに _id を設定するにはどうすればいいですか? 質問する

Mongoose で db ドキュメントに _id を設定するにはどうすればいいですか? 質問する

私は、データベース内のドキュメントをカウントし、その数を使用して _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 });

おすすめ記事