2013-11-04 35 views
22

我想通過計算數據庫中的文檔,並使用該數字來創建_id(假設第一個_id爲0),爲我的Mongoose模型動態創建_id。但是,我無法從我的價值中獲得_id。這裏是我的代碼:如何在Mongoose中設置_id到db文件?

//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' } 

如果你知道發生了什麼,請讓我知道。

回答

25

您也需要到_id財產申報作爲模式的一部分(您的評論出來),或者使用_id選項並將其設置爲false(您使用的id選項,它創建了一個虛擬的getter投_id爲一個字符串,但仍然創建了一個_id ObjectID屬性,因此出現了鑄造錯誤)。

因此,無論這樣的:

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 }); 
+0

即使在我的db.collection.getIndexes()'_id:1'中這樣做了。這是正確的行爲? –

+0

@SarasArya是的,MongoDB總是爲'_id'創建一個索引,而不管它的類型如何(參見[here](https://docs.mongodb.org/v3.0/core/index-single/#index-type- ID))。 – robertklep

6

的@ robertklep的第一段代碼不爲我工作(貓鼬4),還需要禁用_id

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

這對我有用

+0

同樣的事情發生在我身上,謝謝@Tim Qian – Godfather

相關問題