在Mongoose上,「id」屬性是默認創建的,它是一個返回「_id」值的虛擬屬性。你自己不需要這樣做。
如果要禁用自動創建的「ID」屬性,你可以做到這一點定義模式時:
var schema = new Schema({ name: String }, { id: false })
對於_id場,你可以告訴貓鼬不是默認你的時候創建一個使用{_id: false}
屬性創建一個新的Mongoose對象。但是,當您在MongoDB中使用.save()
文檔時,服務器將爲您創建一個_id
屬性。
見:http://mongoosejs.com/docs/guide.html#_id
我在我的代碼做的是創造一個instance method稱爲像returnable
返回一個普通的JS對象只有我需要的屬性。例如:
userSchema.methods.returnable = function(context) {
// Convert this to a plain JS object
var that = this.toObject()
// Add back virtual properties
that.displayName = this.displayName
// Manually expose selected properties
var out = {}
out['id'] = that._id
var expose = ['name', 'displayName', 'email', 'active', 'verified', 'company', 'position', 'address', 'phone']
for(var i in expose) {
var key = expose[i]
out[key] = that[key]
// Change objects to JS objects
if(out[key] && typeof out[key] === 'object' && !Array.isArray(out[key])) {
// Change empty objects (not array) to undefined
if(!Object.keys(out[key]).length) {
out[key] = undefined
}
}
}
return out
}
你們是不是要建立一個沒有_id場模式?那是不可能的。或者你只是試圖查詢一個現有的集合,而忽略返回文檔中的_id字段? – Philipp 2015-04-02 09:30:26
後者。我只是想在對客戶端做出響應時將「_id」的名稱更改爲「id」。 – 2015-04-07 02:46:16