update常见错误


错误:只update修改项

如果你有过关系型数据库的经验,你会很容易犯只修改需要改变的一项,因为在关系型数据库中就是这样作的。先来准备一些数据。

/* demo01.js */
var workmate1={
    name:'panpan',
    age:24,
    sex:1,
    job:'前端',
    skill:{
        skillOne:'HTML+CSS',
        SkillTwo:'JavaScript',
        SkillThree:'PHP'
    },
    regeditTime:new Date()
}

var workmate2={
    name:'panda',
    age:18,
    sex:1,
    job:'JAVA后端',
    skill:{
        skillOne:'HTML+CSS',
        SkillTwo:'J2EE',
        SkillThree:'PPT'
    },
    regeditTime:new Date()
}

var workmate3={
    name:'jspan',
    age:20,
    sex:1,
    job:'UI设计',
    skill:{
        skillOne:'PhotoShop',
        SkillTwo:'UI',
        SkillThree:'Word+Excel+PPT'
    },
    regeditTime:new Date()
}

var db=connect('company')
var workmateArray=[workmate1,workmate2,workmate3]
db.workmate.insert(workmateArray)
print('[SUCCESS]: The data was inserted successfully.');

上面的代码,我们以文件的形式向数据库中插入了3条数据。
这时候我突然发现UI职位的性别出现了错误,本来人家是个美女,这里却写成了男,我们需要修改这条数据,但是经常会这样写。
这样写的问题是,我们的最后一条数据变成了只有sex:0,其它数据全部丢失了,这肯定不是我们想要的。这是新手在操作数据库修改时经常犯的一个错误,就是只修改变动的数据。

正确修改方法

可以声明一个变量,然后把要改变数据的全部信息放入变量,最后执行修改操作。

/* demo02.js */
var db=connect('company')
var workmate3={
    name:'jspan',
    age:20,
    sex:0,
    job:'UI设计',
    skill:{
        skillOne:'PhotoShop',
        SkillTwo:'UI',
        SkillThree:'Word+Excel+PPT'
    },
    regeditTime:new Date()
}
db.workmate.update({name:'jspan'},workmate3)
print('[update]: The data was updated successfully');

这时候你需要删除(db.workmate.drop())表中的数据,因为jspan这个用户已经不在数据库中了,然后重新使用load方法载入插入数据再进行修改。
执行命令如下:

db.workmate.drop()
load('./demo01.js')
load('./demo02.js')

现在这种方法才是正确的,数据修改正常了,但是你会发现写起来非常麻烦,而且特别容易写错。


文章作者: 技术潘
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 技术潘 !
  目录