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,我知道我可以用插件来做这件事,但我想知道我是否可以只使用转换函数——我认为这就是它的目的。