2013-11-04 20 views
22

Ben db belgelerini sayarak ve _id oluşturmak için bu sayıyı kullanarak (ilk _id 0 olduğu varsayılarak), Mongoose modellerim için _id'leri dinamik olarak oluşturmaya çalışıyorum. Ancak, _id değerini değerlerimden ayarlayamıyorum. İşte benim kodum:Mongoose'da db belgesi nasıl ayarlanır?

//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'i bir çok farklı yoldan ayarlamaya çalıştım ama benim için çalışmıyor. İşte son hata var:

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

sen neler biliyorsanız, lütfen bana bildirin.

cevap

25

You ya (bunu yorumlandı) senin şema bir parçası olarak _id mal beyanında gerekir, veya yayınlamayı sanal getter oluşturur id seçeneğini kullanıyoruz (_id seçeneğini kullanın ve false olarak ayarlayın Bir dize için _id ancak yine de bir _id ObjectID özelliği, dolayısıyla aldığınız döküm hatası oluşturuldu).

Yani ya bu:

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

Ya da bu:

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

Bunu yaptıktan sonra bile db.collection.getIndexes() '_id: 1' gösteriliyor. Bu doğru davranış mı? –

+0

@SarasArya evet, MongoDB her zaman türüne bakılmaksızın '_id 'için bir dizin oluşturur (bkz. [Burada] (https://docs.mongodb.org/v3.0/core/index-single/#index-type- İD)). – robertklep

6

@ robertklep kodunun ilk parça benim için çalışmıyor (firavunfaresi 4), ayrıca özürlü _id

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

ve bu benim için çalışıyor

+0

benimle aynı şey oldu, teşekkürler @Tim Qian – Godfather