美文网首页
修改记录

修改记录

作者: 黑山老水 | 来源:发表于2017-09-05 10:42 被阅读25次

    修改记录的方法

    静态方法:

    • update
    • findOneAndUpdate
    • findByIdAndUpdate

    实例方法:

    • update
    • set and save

    实例方法set and save

    在test文件创建update_test.js:

    const assert = require('assert');
    const User = require('../src/user');
    
    describe('Updating records', () => {
             let joe;
             
             beforeEach((done) => {
                joe = new User({name : 'Joe'});
                joe.save()
                    .then(() => done());
             });
             
             it('instance type using set and save', () => {
                console.log(joe);
                joe.set('name', 'Alex');
                console.log(joe);
             });
    });
    

    再改变实例以后,要再次存进数据库:

    it('instance type using set and save', (done) => {
                joe.set('name', 'Alex');
                joe.save()
                    .then(() => User.find({}))
                    .then((users) => {
                          assert(users.length === 1);
                          assert(users[0].name === 'Alex');
                          done();
                    });
             });
    

    使用这个方法构造的好处是,我们可以先修改实例的属性,然后再存进数据库,当我们需要修改很多个属性时,只要与数据库touch一次。


    实例方法update

    可以直接使用update函数来对数据库记录进行更新:

    joe.update({name: 'Alex'});
    

    断言函数:
    当我们需要返回多个回调并且有多个断言时,可以写一个断言函数来减少代码量:

    function assertName(operation, done){  //js的函数作用域
                operation  //作为参数的函数,让它在断言函数里返回promise
                .then(() => User.find({}))
                .then((users) => {
                   assert(users.length === 1);
                   assert(users[0].name === 'Alex');
                   done();
                });
    }
    

    然后直接把函数作为参数使用:

    assertName(joe.update({name: 'Alex'}), done);
    

    所以it function变成:

    it('A model instance can update', (done) => {
                assertName(joe.update({name: 'Alex'}), done);
    });
    

    静态方法update

    update(查找条件,更新内容):

    it('A model class can update', (done) => {
                assertName(User.update({name: 'Joe'}, {name: 'Alex'}), done);
    });
    

    静态方法findOneAndUpdate

    findOneAndUpdate(查找条件,更新内容):

    it('A model class can update one record', (done) => {
                assertName(User.findOneAndUpdate({name: 'Joe'}, {name: 'Alex'}), done);
    });
    

    静态方法findByIdAndUpdate

    findByIdAndUpdate(_id,更新内容):

    it('A model class can find a with an Id and update', (done) => {
                assertName(User.findByIdAndUpdate(joe._id, {name: 'Alex'}), done);
    });
    

    相关文章

      网友评论

          本文标题:修改记录

          本文链接:https://www.haomeiwen.com/subject/xvqujxtx.html