如果传递,如何强制Mongoose忽略__v?

时间:2018-03-05 17:00:42

标签: javascript node.js mongodb mongoose

使用mongoose和Express作为基本数据端点,我在CRUD操作的Update部分遇到问题。

测试更新路径在Postman中有效,但是当我从我的角应用程序尝试时,它会返回:

  

MongoError:更新路径'__v'会在'__v'处产生冲突         在C:\ Users \ rutherfordc.AA \ Documents \ GitHub \ techInventory \ node_modules \ mongoose \ node_modules \ mongodb-core \ lib \ conne   ction \ pool.js:595:61         在authenticateStragglers(C:\ Users \ rutherfordc.AA \ Documents \ GitHub \ techInventory \ node_modules \ mongoose \ node_module   小号\ mongodb的核\ lib中\连接\ pool.js:513:16)         在Connection.messageHandler(C:\ Users \ rutherfordc.AA \ Documents \ GitHub \ techInventory \ node_modules \ mongoose \ node_mod   ULES \ mongodb的核\ lib中\连接\ pool.js:549:5)         在emitMessageHandler(C:\ Users \ rutherfordc.AA \ Documents \ GitHub \ techInventory \ node_modules \ mongoose \ node_modules \ mo   ngodb芯\ lib中\连接\ connection.js:309:10)         在Socket。 (C:\用户\ rutherfordc.AA \文件\ GitHub的\ techInventory \ node_modules \猫鼬\ node_modules \莫   ngodb芯\ lib中\连接\ connection.js:452:17)         在Socket.emit(events.js:160:13)         在addChunk(_stream_readable.js:269:12)         在readableAddChunk(_stream_readable.js:256:11)         在Socket.Readable.push(_stream_readable.js:213:10)         在TCP.onread(net.js:602:20)

我真的不想更新__v,但我不明白为什么会被触发。我怎么能强迫它被忽略?

这是我的更新方法:

  update(req,res){
    let _computer = req.body;
    let _id = req.params.computerId;
    Computer.findOneAndUpdate({'_id':_id}, _computer, {upsert: true}, (err, uc) => {
      if(err){
        log.error(err);
        res.status(500).send(err);
      }else{
        res.status(200).send(uc);
      }
    });
  }

2 个答案:

答案 0 :(得分:2)

您可以执行此操作以从res.send()

发送中删除__v

只需在'-__v'

中添加Computer.findOneAndUpdate({'_id':_id},'-__v');即可

喜欢

 update(req,res){
    let _computer = req.body;
    let _id = req.params.computerId;
    Computer.findOneAndUpdate({'_id':_id},'-__v', _computer, {upsert: true}, (err, uc) => {
      if(err){
        log.error(err);
        res.status(500).send(err);
      }else{
        res.status(200).send(uc);
      }
    });
  }

您还可以在.find()findById()中显示和隐藏任何字段。

隐藏使用'-field_name1 , -field_name2'

Collection.find({},'-_id -__v');

并显示任何特定字段使用'field_name1 field_name2'

collection.find({},'name number');

答案 1 :(得分:0)

此问题已在Maybe [Int]中修复。有关更多详细信息,请参见this link

您还可以在更新之前从mongoose@5.0.16中删除__v

req.body