首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql技巧:如果记录存在更新如果不存在插入的三种处理方法

要求: 新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),更新否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。..., '西安' , 1000 FROM DUAL WHERE NOT EXISTS( SELECT * FROM t_emp WHERE f_emp_code = '10007' ); 更新...西安' , f_salary = IF(1000 > f_salary , 1000 , f_salary) WHERE f_emp_code = '10007' 缺点就是得写2条语句,分别处理插入和更新的场景...这个方法有一个很大的问题,如果记录存在,每次执行完,主键自增id就变了(相当于重新insert了一条),对于有复杂关联的业务场景,如果主表的id变了,其它子表没做好同步,会死得很难看。...values(f_salary)>f_salary,values(f_salary),f_salary); 注意上面的on duplicate key,遇到重复键(即:违反了唯一约束),这时会做update,否则

7.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

你真的了解mongoose吗?

如果出错, error 是出错信息,result 是 null;如果查询成功, error 是 null, result 是查询结果,查询结果的结构形式是根据查询方法的不同而有不同形式的。...position修饰 push 操作符以指定要添加的元素在数组中的位置。slice修饰 push 操作符以限制更新后的数组的大小。...sort修饰 在指定的位置添加元素以更新数组字段 按照指定的规则排序 限制数组大小 存储数组 options lean: true 返回普通的 js 对象,而不是 Mongoose Documents...sort:如果查询条件找到多个文档,设置排序顺序以选择要更新哪个文档。 maxTimeMS:为查询设置时间限制。 upsert:布尔值,如果对象不存在,创建它。默认值为 false。...omitUndefined:布尔值,如果为 true,则在更新之前删除值为 undefined 的属性。 rawResult:如果为 true,返回来自 MongoDB 的原生结果。

41.4K30

Mongoose 插件记录Node.js API日志

Diff: 这是主要属性,它是两个 JSON 的 diff 如果你希望对自己的应用程序有意义,可以添加更多字段,也可以根据需要更改和升级架构。...isEqual:此方法支持比较数组数组缓冲区、布尔值、日期对象、错误对象、映射、数字、对象、正则表达式、集合、字符串、符号和类型化数组。...函数和 DOM 节点进行严格相等的比较,即使用 ===。 这里我们迭代每个对象的属性和值,并将它与旧对象进行比较。...如果当前对象的 value 不等于前一个对象中相同属性的值:base[key] 如果该值是对象本身,我们递归调用函数changes 直到它得到一个值,它最终将作为 result[key]=value 存储在.../app/utils/diff-plugin')) 这是 user 更新 API 的基本示例: const User = require('..

2.7K40

Mongoose学习参考文档

1.8 关于Array Array在JavaScript编程语言中并不是数组,而是集合,因此里面可以存入不同的值,以下代码等价: var ExampleSchema1 = new Schema..._id; //再将其删除 PersonModel.update({_id:_id},person,function(err){}); //此时才能用Model操作,否则报错...当然这样的更新很麻烦,可以使用$set属性来配置,这样也不用先查询,如果更新的数据比较少,可用性还是很好的: PersonModel.update({_id:_id},{$set:{name:'...,如果要返回更新后的对象,则要使用如下方法 Person.findByIdAndUpdate(_id,{$set:{name:'MDragon'}},function(err,person){...err==null,person就能取到数据 });   这种方式相对直接查询,分的比较明细,如果不带callback,返回query,query没有执行的预编译查询语句,该query对象执行的方法都将返回自己

24.2K90

MongoDB增删改查操作

在项目根目录下输入以下命令导入 mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件 4.查询文档 find()方法 返回一组文档 // 根据条件查找文档(条件为空查找所有文档...) Course.find().then(result => console.log(result)) // 返回文档集合(数组形式) [{ _id: 5c0917ed37ec9b03c07cf95f...// 更新单个 User.updateOne({查询条件}, {要修改的值}).then(result => console.log(result)) // 更新多个 User.updateMany(...{查询条件}, {要更改的值}).then(result => console.log(result)) ​ ​ // 更新单条文档 如果条件满足多个文档,也是默认只更新第一个 User.updateOne...验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败插入失败。

6.2K10

Nodejs学习笔记(十四)— Mongoose介绍和入门

图中可以看出,密码更新成功!update方法基本可以满足所有更新!   ...     小于等于   $ne            不等于   $in             在多个值范围内   $nin           不在多个值范围内   $all            匹配数组中多个值...  $regex  正则,用于模糊查询   $size   匹配数组大小   $maxDistance  范围查询,距离(基于LBS)   $mod     取模运算   $near   邻域查询,查询附近的位置...(基于LBS)   $exists    字段是否存在   $elemMatch  匹配内数组内的元素   $within  范围查询(基于LBS)   $box    范围查询,矩形范围(基于LBS)...mongoose操作基本入门大致就是这些,自已试一下,入门完全没问题,并且比node-mongodb-native还是要简单明了一些,   在node.js中操作数据库,如果逻辑相对复杂时,大量的回调嵌套还是比较郁闷的

2.6K60

大数据技术之_22_MongoDB学习_MongoDB 的简介、下载、安装、启动、配置和关闭 + MongoDB 的基本操作 + Mongoose + 使用 java 对 MongoDB 增删改查

.insert(doc(s));         - 向指定的集合插入一个或多个文档,如果集合不存在创建         - 具体示例:db.users.insert({username...可以将对象或数组中的对象添加进集合中,添加时如果集合或数据库不存在,会自动创建。   插入的文档对象会默认添加_id 属性,这个属性对应一个唯一的id,是该文档的唯一标识。...// $addToSet 向数组中添加一个新元素,如果数组中已经存在了该元素,则不会添加(即不可以重复添加) db.users.update({username: "tangseng"}, {$push...只需要连接一次,连接一次成功后,除非项目停止服务器关闭,否则连接一般不会断开。因为 MongoDB 数据库没有事务控制。...如果你的数据是被结构化成支持模式的,这是非常有用的。   简单来说,模式就是对文档的约束,有了模式,文档中的字段必须符合模式的规定。否则将不能正常操作。

17.7K30

mogoose 创建数据库并增删改查

下载 npm i mongoose -s 连接数据库 const mongoose = require("mongoose"); mongoose.connect(dbURL); const db =...String 定义字符串 Number 定义数字 Date 定义日期 Buffer 定义二进制 Boolean 定义布尔值 Mixed 定义混合类型 ObjectId 定义对象ID Array 定义数组...Decimal128 Map 约束能用对象的方法描述数据类型 是否必须 是否重复 默认值 等,如下定义了一个用户表结构 注意:如果定义表结构时没有定义_id,mongoose会自己添加一个该字段...添加`createdAt updatedAt`创建时间和更新时间两个字段 } ); 如果在定义了结构后需要添加新字段,在实例上使用add()方法 创建表model 通过mongoose.model...}, { name: "3", email: "789@qq.com", passWord: "789" } ); res.status(200).json(users); // users是数组

5.1K30

数据库概述及环境搭建

术语 解释说明 database 数据库,mongoDB数据库软件中可以建立多个数据库 collection 集合,一组数据的集合,可以理解为JavaScript中的数组 document 文档,一条具体的数据...Node.js第三方包mongoose 使用npm install mongoose命令下载 1.7 启动MongoDB 在命令行工具中运行net start mongoDB即可启动MongoDB,否则...因为服务器默认是开启的,所以在启动之前要先停止MongoDB 如果在命令行窗口启动数据库失败,出现以下情况: ? 那么需要在菜单栏搜索命令行并右击鼠标以管理员身份运行 ?...('mongoose'); // 创建数据库 mongoose.connect('mongodb://localhost/plarground', { useNewUrlParser:...1.9 创建数据库 在MongoDB中不需要显式创建数据库,如果正在使用的数据库不存在,MongoDB会自动创建。

1.7K40

Mongoose 实现关联查询和踩坑记录

内嵌是把相关联的数据保存在同一个文档内,我们可以用对象或数组的形式来存储,这样好处是我们可以在一个单一操作内完成,可以发送较少的请求到数据库服务端,但是这种内嵌类型也是一种冗余的数据模型,会造成数据的重复...,如果很复杂的一对多或多对多的关系,表达起来就很复杂,也要注意内嵌还有一个最大的单条文档记录限制为 16MB。...Aggregate 的 $lookup 实现关联查询 MongoDB 3.2 版本新增加了 lookup 实现多表关联,在聚合管道阶段中使用,经过 lookup 阶段的处理,输出的新文档中会包含一个新生成的数组列...如果是直接显示的对象,就需要设置 toObject 属性,例如直接打印 console.log(res)。...另外一种是 Mongoose 提供的 populate 方法,这种方式写起来,代码会更简洁些,这里需要注意如果关联的字段是非 _id 字段,一定要在 Schema 中设置虚拟值填充,否则 populate

26.4K20
领券