mongodb 数据更新与_id之间的故事

今天在对接接口的时候遇到一些问题,因为之前为了方便验证接口写的对不对是往数据库里面自己插的一些数据,刚开始用的时候还用的不亦乐乎,后来遇到更新的时候出错了。

比如我们这个APP是个医疗APP刚开始注册的时候默认都为病人,如下

当有医生想要在这个APP注册赚钱的时候需要注册提交自己的信息,如下

然后按道理来说会注册成功但是却报After applying the update to the document {_id: 3 , ...}, the (immutable) field \‘_id\‘ was found to have been altered to _id: 17‘ }

我当时也不知道到底是什么出了问题后来问了和我一起刚来的同事(也是菜鸟)说是数据库里面最开始是手动插入的数据,然后更新的时候_id 重复冲突了,当时听了删了很多数据,最后确实是可以,可是我虽然是菜鸟我觉得这个不是问题的本质。

接着我不停的查资料后来才知道问题本质是我代码写的有问题如下:

//医生认证
router.post(‘/doctorAuth‘,function (req,res) {
console.log(‘请求对象:‘,req.body);
User.update(
{
_id: req.body.doctor_id,
nickname: req.body.nickname,
hospital: req.body.hospital,
address: req.body.address,
license: req.body.license,
photo: req.body.photo,
identity:enums.identityPerson.doctor,
state: enums.authState.pass,
department: req.body.department,
speciality: req.body.speciality
},function (err,doctorAuth) {
if(err) throw err;
if (doctorAuth.nModified == 0 && doctorAuth.n == 0) {
res.send(errors.e112);
return;
}
console.log(doctorAuth);
res.send(errors.e0);
})
里面我update把_id带上了,要知道mongodb中的_id是不可以更新的。终于找到问题所在,然后简单修改代码如下:

//医生认证
router.post(‘/doctorAuth‘,function (req,res) {
console.log(‘请求对象:‘,req.body);
User.update(
{
_id: req.body.doctor_id
},
{
nickname: req.body.nickname,
hospital: req.body.hospital,
address: req.body.address,
license: req.body.license,
photo: req.body.photo,
identity:enums.identityPerson.doctor,
state: enums.authState.pass,
department: req.body.department,
speciality: req.body.speciality
},function (err,doctorAuth) {
if(err) throw err;
if (doctorAuth.nModified == 0 && doctorAuth.n == 0) {
res.send(errors.e112);
return;
}
console.log(doctorAuth);
res.send(errors.e0);
})

});
然后就可以了。吃了一大亏找到了教训,以后再也不会犯这种问题了。可能在你们面前这个都不是问题,可对于我这个菜鸟来说解决了就感觉非常开心O(∩_∩)O~~

时间: 2024-08-05 12:15:56

mongodb 数据更新与_id之间的故事的相关文章

Mongodb数据更新命令

一.Mongodb数据更新命令 Mongodb更新有两个命令:update.save. 1.1update命令 update命令格式: db.collection.update(criteria,objNew,upsert,multi) 参数说明: criteria:查询条件 objNew:update对象和一些更新操作符 upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入. multi:默认是false,只更新找到的第一条记录

MySQL、MongoDB、Redis 数据库之间的区别与使用(本章迭代更新)

MySQL.MongoDB.Redis 数据库之间的区别与使用 MySQL.MongoDB.Redis 数据库之间的区别与使用(本章迭代更新) update:2019年2月20日 15:21:19(本章迭代更新) 一.数据库之间的区别 MySQL MySQL概述 关系型数据库.无论数据还是索引都存放在硬盘中.到要使用的时候才交换到内存中.能够处理远超过内存总量的数据. 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的 SQL 语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断

第三课 MongoDB 数据更新

1.课程大纲 本课程主要讲解 MongoDB 数据更新的相关内容,包括文档插入 insert 函数.文档删除 remove函数以及文档更新update函数的基本使用.除此之外,还会介绍 MongoDB 的写安全机制.批量写入Bulk函数等内容. MongoDB 文档插入和删除 MongoDB 文档修改 MongoDB 的写安全机制 2.课程简介 本课时,首先会从整体上对MongoDB 数据更新做一个简单介绍,然后会介绍文档插入函数 insert.文档的批量更新函数 Bulk 以及文档删除函数 r

ArcGIS和Hadoop之间的故事之二

ArcGIS和Hadoop之间的故事之二 byGISer_Leo 接上一文章的内容,来测试一下Hadoop Tools这个工具箱. 准备数据:hq.shp 1.双击 Features to JSON,打开后,填写参数内容,如下: 2.点击OK执行,生成json文件,打开文件,如下图所示: 3.这里需要记录一下字段,在hive中生成相应的表: 4.双击Copy to Hadoop,打开,填写相应的参数,如下: 这样就把数据放到了HDFS上了. 5.通过Hive可以查询到相应的数据,也可以通过Cop

Mongodb数据更新命令(update、save)

Mongodb更新有两个命令:update.save. 1.1update命令 update命令格式: db.collection.update(criteria,objNew,upsert,multi) 参数说明: criteria:查询条件 objNew:update对象和一些更新操作符 upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入. multi:默认是false,只更新找到的第一条记录.如果为true,把按条件查询出

MongoDB中的_id和ObjectId

ObjectId是"_id"的默认类型.它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它. 这是MongoDB采用ObjectId,而不是其他比较常规的做法(比如自动增加的主键)的主要原因,因为在多个 服务器上同步自动增加主键值既费力还费时.MongoDB从一开始就设计用来作为分布式数据库,处理多个节 点是一个核心要求.后面会讲到ObjectId类型在分片环境中容易生成得多. ObjectId使用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串.由于看

mongoDB数据更新与操作符

//转载 1).update()命令 db.collection.update( criteria, objNew, upsert, multi ) criteria  : update的查询条件,类似sql update查询内where后面的 objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 upsert  : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是fals

mongodb+php通过_id查询

在php中通过_id 在mongodb中查找特定记录: <?php $conn=new Mongo("127.0.0.1:27017"); #连接指定端口远程主机 $db=$conn->sky; #选择mydb数据库 $collection=$db->bobo; #选择集合(选择’表’) //** 查询一条数据 **/ //$cursor = $collection->findOne(); $where=array("_id"=>new

一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事

微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物. 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况下,如何从系统架构的角度出发,构建灵活.易扩展的系统,快速应对需求的变化:同时,随着用户的增加,如何保证系统的可伸缩性.高可用性,成为系统架构面临的挑战.如果你想了解大数据的学习路线,想学习