На Mongoose свойство «id» создано по умолчанию, и оно является виртуальным, возвращающим значение «_id». Вам не нужно это делать самостоятельно.
Если вы хотите отключить автоматическое создание свойства «Идентификатор», вы можете сделать это при определении схемы:
var schema = new Schema({ name: String }, { id: false })
Для поля _ID, вы можете сказать, Mongoose, чтобы не создавать один по умолчанию, когда вы создайте новый объект Mongoose с свойством {_id: false}
. ОДНАКО, когда вы получите .save()
документ в MongoDB, сервер создаст для вас _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
The later.I просто хочу изменить имя «_id» на «id» при ответе на клиента. –