使用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);
}
});
}
答案 0 :(得分:2)
您可以执行此操作以从res.send()
只需在'-__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)