转换由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());