2013-11-04 18 views
22

Sto provando a creare dinamicamente _id's per i miei modelli Mongoose contando i documenti nel db e usando quel numero per creare _id (assumendo che il primo _id sia 0). Tuttavia, non posso ottenere _id per impostare dai miei valori. Ecco il mio codice:Come impostare _id sul documento db in Mongoose?

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

Ho provato a impostare _id in diversi modi, ma non funziona per me. Ecco l'ultimo errore:

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

Se sai cosa sta succedendo, per favore fatemelo sapere.

risposta

25

vi sia bisogno di dichiarare la proprietà _id come parte del vostro schema (si ha commentato fuori), oppure utilizzare l'opzione _id e impostarlo in false (che si sta utilizzando l'opzione id, che crea un getter virtuale per lanciare _id a una stringa, ma ancora creato una proprietà ObjectID _id, quindi l'errore di trasmissione che si ottiene).

Quindi o questo:

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

O questo:

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

Anche dopo aver eseguito questa operazione nel mio db.collection.getIndexes() '_id: 1' viene mostrato. È corretto questo comportamento? –

+0

@SarasArya yes, MongoDB crea sempre un indice per '_id', indipendentemente dal suo tipo (si veda [qui] (https://docs.mongodb.org/v3.0/core/index-single/#index-type- id)). – robertklep

6

La prima parte del codice di @ robertklep non funziona per me (mangusta 4), anche bisogno di disabile _id

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

e questo funziona per me

+0

stessa cosa è successo con me, grazie @ Tim Qian – Godfather

Problemi correlati