转换由Mongoose find函数返回的数组的结果

我已经添加了一个转换函数到我的模式的toObject剥离某些属性,并将_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; } } }); 

我查了一下,只能find这个问题 ,build议的答案是使用lean() – 这对我没有帮助。

作为一个解决方法,我添加了一行var result = items.map(x => x.toObject()); ,虽然它工作的很好,但我不知道是否有办法在返回的任何文档(单个或数组)上自动触发转换,所以我不必迭代结果。

我已经创build了一个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 )。

顺便说一句,已经有一个id虚拟属性,由mongoose定义(除非在模式选项中将id设置为false )。

我这样使用它:

 ItemSchema.plugin(cleanup); 

那么,环顾一下后,我终于决定把结果转换成对象。 正如在问题中提到的,而不是: return items; 我已经return items.map(x => x.toObject());