修改记录

2017-09-05  本文已影响25人  黑山老水

修改记录的方法

静态方法:

实例方法:

实例方法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);
});
上一篇 下一篇

猜你喜欢

热点阅读