修改Mongoose查詢返回的對象

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 = "測試";
});

// 執(zhí)行完打印title,會發(fā)現(xiàn)修改不生效
console.log(docs);

修改的三種方法
// 不看文檔直接擼
const docs =  await Model.find({});
const newDocs = docs.map(function (obj) {
  return Object.assign({}, obj);
});

// 調(diào)用toObject或toJSON方法
const docs = (await Model.find({})).toObject();

// 調(diào)用lean方法
const docs = await Model.find({}).lean();
toObject 與 toJSON 傻傻分不清楚

我也懶得解釋了,直接看stack overflow。

有時候,你會需要transform

舉個栗子:MongoDB 時間類型存儲的是0時區(qū)時間,接口想要返回東8區(qū)時間;每次使用時都轉(zhuǎn)換一遍太繁瑣了,為什么不默認就返回東8區(qū)時間呢?

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

用path也能實現(xiàn)相似功能

schema.path('date').get(function (date) {
  return date.toEast8();
});
schema.set('toObject', { getters: true });
schema.set('toJSON', { getters: true });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容