猫鼬-从lean删除_id(使用toJSON()吗?)

时间:2020-09-04 12:43:50

标签: node.js mongodb mongoose

我有一个使用Mongoose 5.x的NODE.JS项目

我的模型具有toJSON方法,可以完美删除_id__v字段

mySchema.method("toJSON", function toJSON() {
  const {__v, _id, ...object} = this.toObject();
  return {
    id: _id,
    ...object
  };
});

因此,当从数据库中获取数据时:

const data = myModel.findOne({_id: id});

我得到一个序列化给用户的对象:

res.json(data);

它不包含必填的_id__v字段。

问题是当我使用lean()时:

const data = myModel.findOne({_id: id}).lean();

data对象包含这些字段。

使用lean

时,我可以手动将其删除

但是我更希望找到一种在两种情况下都采用相同机制对数据对象进行清理的方法。

有什么建议吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

尝试此操作从文档中检索_id

myModel.findOne({_id: id}, function(err, doc) {
   if(err)
     return 'do something with this err'

   console.log(doc._id)
})