下划线的Mongoose对象克隆和删除属性不工作?
我正在使用Mongoose,我想从我的Mongoose实例中删除_id
属性,然后将JSON响应发送到客户端。
例:
var ui = _.clone(userInvite); delete ui["_id"]; console.log(JSON.stringify(ui)); //still has "_id" property, why?
以前没有工作。
但是,如果我这样做:
var ui = JSON.parse(JSON.stringify(userInvite)); //poor man's clone delete ui["_id"]; console.log(JSON.stringify(ui)); //"_id" is gone! it works!
我不明白为什么使用Underscore调用克隆的对象上的delete
不起作用,但如果我做hacky JSON.string / JSON.parse,它的工作原理。
有关这种行为的任何想法?
我刚刚遇到了一个类似的问题,试图用id
replace_id
。 这样做对我有效:
Schema.methods.toJSON = function(options) { var document = this.toObject(options); document.id = document._id.toHexString(); delete(document._id); return document; };
也许它会开始工作,如果你delete ui["_id"]
delete ui._id
或使用toObject
而不是_.clone
。
只是为了增加前面的答案,还有一种方法可以达到同样的效果。 'toObject'函数将转换应用于由schema.options.toObject.transform函数定义的文档,例如
schema.options.toObject.transform = function(doc, ret) { ret.id = doc._id; delete ret._id; };