Node.js Mongoose find函数返回的数组的转换结果
我在模式的Node.js Mongoose find函数返回的数组的转换结果,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在模式的toObject中添加了一个转换函数,以剥离某些属性,并将\u id的名称更改为id。当我使用findOne并对结果调用toObject时,它非常有效,但是我还有一个find({},(err,items)=>{…})命令。无法在数组上调用toObject 以下是我的模式: var ItemSchema = new Schema({ version: {type: String, default: '1.0.0'}, created: {type: Date, defau
toObject
中添加了一个转换函数,以剥离某些属性,并将\u id
的名称更改为id
。当我使用findOne
并对结果调用toObject
时,它非常有效,但是我还有一个find({},(err,items)=>{…})
命令。无法在数组上调用toObject
以下是我的模式:
var ItemSchema = new Schema({
version: {type: String, default: '1.0.0'},
created: {type: Date, default: Date.now},
modified: {type: Date, default: Date.now},
properties: Schema.Types.Mixed
}, {
toObject: {
transform: (doc, ret) => {
// remove the _id and __v of every document before returning the result
ret.id = doc.id;
delete ret._id;
delete ret.__v;
}
}
});
我查过了,只能找到建议的答案是使用lean()
——这对我没有帮助
作为一种解决方法,我添加了行
var result=items.map(x=>x.toObject())代码>,虽然它工作得很好,但我想知道是否有一种方法可以在返回的任何文档(单个或数组)上自动触发转换,这样我就不必迭代结果了。我创建了一个mongoose插件来做类似的事情
var cleanup = function (schema) {
var toJSON = schema.methods.toJSON || mongoose.Document.prototype.toJSON;
schema.set('toJSON', {
virtuals: true
});
schema.methods.toJSON = function () {
var json = toJSON.apply(this, arguments);
delete json._id;
delete json.__t;
delete json.__v;
return json;
};
};
基本上,它覆盖了toJSON
(尽管您可以对toObject
执行相同的操作)
顺便说一下,已经有一个由mongoose定义的id
虚拟财产(除非在模式选项中将id
设置为false
)
我这样使用它:
ItemSchema.plugin(cleanup);
嗯,在四处看了一会儿之后,我最终决定自己将结果转换为对象。如问题中所述,而不是:退货项目代码>我有返回items.map(x=>x.toObject())代码>据我所知,如果已将正确的代码添加到架构中,则不必手动调用toObject
。您能否提供代码,说明如何将转换添加到toObject
?我怀疑钥匙是假的there@rompetroll添加了模式代码。干杯谢谢@Bertrand,我知道我可以用插件来做这件事,但我想知道我是否可以只使用转换函数——我认为这就是它的目的。