首页 > 解决方案 > Mongoose 在发送到前端之前移除 _id 和 __v

问题描述

当我通过 mongoose 从 mongo 获取数据时...

      const allAssets = await assets
        .find({ company })
        .sort([['createdAt', -1]])
        .exec();
      res.status(200).json({ assets: allAssets });

我总是得到 _id 和 __v 但我不想将它们发送到前端,有没有办法我可以轻松地说我不想要这些值或在发送它们之前删除它们?

    {
      "indistructable": true,
      "_id": "5e345c2dc84be8995a5b4cf2",
      "baseUri": "https://api.website.com/nameco8/",
      "company": "jnameco8",
      "description": "asset",
      "image": "myimage.png",
      "name": "jim",
      "supply": 100,
      "createdAt": "2020-01-31T16:56:13.816Z",
      "updatedAt": "2020-01-31T16:56:13.816Z",
      "__v": 0
    },

我试过添加

    __v: {type: Number, select: false},
    _id: { type: mongoose.Schema.Types.ObjectId, select: false },

到我的架构,但是当保存到架构时,我得到一个错误 "document must have an _id before saving"

标签: mongodbmongoosemongoose-schema

解决方案


据我认为,模式用于写入以限制将未知字段写入文档,这使您的文档在您的集合中看起来相似,但如果您需要删除读取中的几个字段,请尝试在.find()中进行投影:

const allAssets = await assets
        .find({ company }, {_id :0, __v:0})
        .sort([['createdAt', -1]])
        .exec();
      res.status(200).json({ assets: allAssets });

推荐阅读