Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
316 views
in Technique[技术] by (71.8m points)

javascript - How to set _id to db document in Mongoose?

I'm trying to dynamically create _id's for my Mongoose models by counting the documents in the db, and using that number to create the _id (assuming the first _id is 0). However, I can't get the _id to set from my values. Here's my code:

//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);
});

I've tried to set the _id a number of different ways, but it's not working for me. Here's the latest error:

{ message: 'Cast to ObjectId failed for value "16" at path "_id"',
  name: 'CastError',
  type: 'ObjectId',
  value: 16,
  path: '_id' }

If you know what's going on, please let me know.

question from:https://stackoverflow.com/questions/19760829/how-to-set-id-to-db-document-in-mongoose

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You either need to declare the _id property as part of your schema (you commented it out), or use the _id option and set it to false (you're using the id option, which creates a virtual getter to cast _id to a string but still created an _id ObjectID property, hence the casting error you get).

So either this:

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

Or this:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...