45

データベース内のドキュメントを数え、その数を使用して_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' }

何が起こっているか知っているなら、私に知らせてください。

4

4 に答える 4

59

プロパティをスキーマの一部として宣言する_id(コメントアウトした) か、_idオプションを使用して設定する必要がありfalseます (オプションを使用して、文字列idにキャストする仮想ゲッターを作成しますが、 ObjectIDを作成します)。プロパティ、したがって、取得するキャストエラー)。_id_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 });
于 2013-11-04T03:02:03.343 に答える
17

@robertklepのコードの最初の部分が機能しません(mongoose 4)。無効にする必要があります_id

var Post = new mongoose.Schema({
  _id: Number,
  title: String,
  content: String,
  tags: [ String ]
}, { _id: false });

そしてこれは私のために働く

于 2015-11-10T06:59:32.130 に答える