前言
在使用mongoose操作mongodb数据库时,会遇到最基本的增删改查这四个额操作,相比起来这四个操作里, ’ 改 ’ 这个操作是最复杂的,我也用花了点时间研究了一下 findOneAndUpdate 的简单使用,接下来给大家讲解一下。
正文
基本语法
Model.findOneAndUpdate([(conditions, doc, [options], [callback])]
- conditions
第一个参数是一个对象参数,是用于查询与之相匹配的数据用的 - doc
第二个参数也是一个对象参数,用于修改查询到的数据中的某条信息 - options
第三个参数也是一个对象参数,主要用于设定匹配数据与更新数据的一些规定,比较复杂,一般用不到 - callback
第四个参数也就是我们最熟悉的回调函数,函数默认传入两个参数,err、data。当数据库发生错误的时候传回一个err,若数据库正常,err为空;当正常根据第一个参数查询到相关数据并成功修改了我们设定的数据,data返回修改前的数据信息,若根据第一个参数没有查询到相关数据,data为null
示例
这里我就不做任何的数据库的连接、设计数据结构、挂载到模板等操作了
- 数据库
//假设这是我们数据库里的数据
[
goods: [
{
name: '苹果',
price: 5
},
{
name: '香蕉',
price: 3
},
{
name: '菠萝',
price: 7
}
]
]
- 对数据库信息进行修改更新
Model.findOneAndUpdate({
name: '香蕉'
}, {
$set: {
price: 10
}
}, {}, function(err, data) {
if(err) {
console.log('数据库发生错误')
}
else if(!data) {
console.log('未查找到相关数据')
console.log(data)
}
else if(data){
console.log('修改数据成功')
console.log(data)
}
})
我来稍微讲解一下这个例子
- 第一个参数conditions,用于查询我们数据库中name为香蕉的数据
- 第二个参数doc,
$set
的作用是用来指定一个键并更新键值,若键不存在并创建。 所以我们在$set
中设置了将我们查询到的数据的price改为10 - 第三个参数options,因为简单使用没用到,我就只给了个空对象
- 第四个参数callback,
if(err) 是用于判断数据库是否发生错误,若数据库没发生错误,err为空,执行下一条语句;若数据库发生错误,err为错误对象,不为空,执行该条语句,打印' 数据库发生错误 '
if(!data)用于判断是否正确查找到与我们第一个参数匹配的相关数据,若没查找到,data为null,!data不为空,执行该条语句,打印' 未查找到相关数据 ' 和一个 null;若查找到了,data为查找到的数据,!data为空,执行下条语句
if(data)用于处理与if(!data)相反的操作,查询到相关数据,则data不为空,执行该条语句,打印 ' 修改数据成功 ' 和 我们查询到的该条数据信息;
- 打印结果
数据修改成功
{
name: '香蕉',
price: 3
}
- 再查看一下数据库里的数据
可以看到数据库里的香蕉的price已经被改为10了
//假设这是我们数据库里的数据
[
goods: [
{
name: '苹果',
price: 5
},
{
name: '香蕉',
price: 10 //修改后的数据
},
{
name: '菠萝',
price: 7
}
]
]
结束语
好了 mongoose中修改数据的操作命令 findOneAndUpdate 的简单使用 就是如此,希望对大家有所帮助。