【问题标题】:mongoose create returns __v猫鼬创建返回__v
【发布时间】:2018-05-03 08:44:43
【问题描述】:

我正在尝试用 mongoose 制作一个 rest api,我想隐藏 __v 属性,我成功地将它隐藏在 find 和 findById 上:

Contact.find({}, '-__v', function(error, list) { });

Contact.findById(req.params.id, '-__v', function(error, item) { });

但是当我使用create方法时

Contact.create(req.body, function(error, item) { });

它返回给我添加了 __v 属性的项目。

我也在这样的架构上使用 select: false 尝试了这种方法

__v: {
  type: Number,
  select: false
}

这个方法也做同样的事情,它对 find 和 findById 隐藏了 __v 属性,但也不对 crate 方法返回的对象隐藏它。

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    在架构中你可以设置如下

     var Schema = new Schema({...}, { versionKey: false });
    

    【讨论】:

    • 但我知道不建议这样做,所以我想保留该属性,但在返回端点上的数据时将其隐藏
    • 希望这个link可以帮助你。 :)
    【解决方案2】:

    你也可以在创建文件文档后直接使用纯js:

    Contact.create(req.body, function(error, item) { 
        delete item.__v;
        //other things
    });
    

    【讨论】:

    • 目前这是一种不错的方法,我对 mongo 还是很陌生,但是对于某些 eason,我无法删除该属性,但如果我克隆对象并删除它,我可以这样做来自克隆元素,非常感谢您的回答
    • @PacuraruDaniel 我不认为你可以删除它,因为item 是一个“特殊的”Mongoose 文档对象。例如,您可以使用item = item.toObject() 将其转换为普通对象。或者像你一样克隆它。
    • @MikaS 是的,我得出了和你一样的结论,它是一个特殊的对象,它就像一个模式对象,因为我可以调用我在 Contact 模式上实现的方法,无论如何谢谢非常感谢您的帮助
    猜你喜欢
    • 2020-10-23
    • 2023-02-22
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 2018-08-22
    • 2014-04-19
    相关资源
    最近更新 更多