美文网首页
修改Mongoose查询返回的对象

修改Mongoose查询返回的对象

作者: singno | 来源:发表于2016-11-12 18:56 被阅读0次
    Mongoose查询返回的对象是不能直接修改的
    //  以下代码不能直接运行,仅给出流程
    const schema = new mongoose.Schema({
      title: String,
      date: Date,
      content: String
    });
    
    const Model = mongoose.model('test', schema);
    const docs =  await Model.find({});
    
    docs.forEach(function (doc) {
       doc.title = "测试";
    });
    
    // 执行完打印title,会发现修改不生效
    console.log(docs);
    
    
    修改的三种方法
    // 不看文档直接撸
    const docs =  await Model.find({});
    const newDocs = docs.map(function (obj) {
      return Object.assign({}, obj);
    });
    
    // 调用toObject或toJSON方法
    const docs = (await Model.find({})).toObject();
    
    // 调用lean方法
    const docs = await Model.find({}).lean();
    
    toObject 与 toJSON 傻傻分不清楚

    我也懒得解释了,直接看stack overflow

    有时候,你会需要transform

    举个栗子:MongoDB 时间类型存储的是0时区时间,接口想要返回东8区时间;每次使用时都转换一遍太繁琐了,为什么不默认就返回东8区时间呢?

    schema.options.toObject = schema.options.toJSON = {
      transform: function(doc, ret, options) {
        ret.date = ret.date.toEast8(); 
        return ret;
      }
    }
    

    用path也能实现相似功能

    schema.path('date').get(function (date) {
      return date.toEast8();
    });
    schema.set('toObject', { getters: true });
    schema.set('toJSON', { getters: true });
    

    相关文章

      网友评论

          本文标题:修改Mongoose查询返回的对象

          本文链接:https://www.haomeiwen.com/subject/cguqpttx.html