Mongoose: Model.create рд╡рд╛рджрд╛ рд╣рд▓ рд╣реЛ рдЧрдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЧрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдлрд╝рд░ре░ 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░,

рдореИрдВ рдиреЗрд╡рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг 5.0.3 рдФрд░ рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг 9.4.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдиреЗрд╡рд▓рд╛ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ model.create рдХреЛ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдбреАрдмреА рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреАрдмреА рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рджрд╛ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред

async function test(){

    let schema = new mongoose.Schema({a: String});

    let model = mongoose.model('test', schema);

    await model.remove({}).exec();

    await model.create({ a: 'test'}, 
       (err,result)=> {console.log('created');});

    await model.findOneAndUpdate(
        { a : 'test' } , 
        { a: 'newValue'}
    )
    .exec((err, result) => {
        console.log('update : '+result);
    });

    await model.find({a: 'test'},(err,result) => {
        console.log(result); 
    });

}

output in terminal : 
    update : null
    found :
    created

FindOneAndUpdate рдХреЛ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЕрдВрдд рдореЗрдВ "рдмрдирд╛рдпрд╛ рдЧрдпрд╛" рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐ рдХрд╛ рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ async рдХрд╛рд░реНрдп 'рдмрдирд╛рдиреЗ' рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рдереАред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╡рд╛рджрд╛ рдЬреЛрдбрд╝рдХрд░ рдЬреЛ рдХрд┐ рдПрдХ рдмрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рдХреЙрд▓рдмреИрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

async function test(){

    let schema = new mongoose.Schema({a: String});

    let model = mongoose.model('test', schema);

    await model.remove({}).exec();

    await new Promise((resolve,reject) => {
        model.create({ a: 'test'}, 
       (err,result)=> {
            console.log('created');
            resolve();
        });
    });

    await model.findOneAndUpdate(
        { a : 'test' } , 
        { a: 'newValue'}
    )
    .exec((err, result) => {
        console.log('update : '+result);
    });

    await model.find({a: 'newValue'},(err,result) => {
        console.log('found : ' +result); 
    });

}

output in terminal: 
     created
     update : { _id: 5a735fbc1fe826233014d62d, a: 'test', __v: 0 }
     found : { _id: 5a735fbc1fe826233014d62d, a: 'newValue', __v: 0 }

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реИред

рдбреАрдмреА рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрд╛рд░реНрдп рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ рддреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрд╡реЗрд░реАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ model.create рдХрд╛ рднреА рдорд╛рдорд▓рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реА рдХреНрд╡реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рднреА рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдкреВрд░реЗ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдбреАрдмреА рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╢рд╛рдпрдж рдореИрдВ рдкреВрд░реА рдмрд╛рдд рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореБрдЭреЗ 4.x рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдкрдврд╝рдирд╛ рдпрд╛рдж рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореЙрдбрд▓ рдкрд░ рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

let x = model.create({ a: 'test' }, () => {})
  x.then(console.log(x)) //TypeError: Cannot read property 'then' of undefined

рдпрджрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ:

let x = model.create({ a: 'test' })
  x.then(console.log(x)) // Promise { <pending> }

model.js рдХреЗ рд▓рд┐рдП 5.x рд╕реНрд░реЛрдд utils.promiseOrCallback рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рд╣рди рдХрд░рддрд╛ рд╣реИ

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореБрдЭреЗ 4.x рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдкрдврд╝рдирд╛ рдпрд╛рдж рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореЙрдбрд▓ рдкрд░ рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

let x = model.create({ a: 'test' }, () => {})
  x.then(console.log(x)) //TypeError: Cannot read property 'then' of undefined

рдпрджрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ:

let x = model.create({ a: 'test' })
  x.then(console.log(x)) // Promise { <pending> }

model.js рдХреЗ рд▓рд┐рдП 5.x рд╕реНрд░реЛрдд utils.promiseOrCallback рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рд╣рди рдХрд░рддрд╛ рд╣реИ

рд╣рд╛рдБ, @lineus рд╕рд╣реА рд╣реИ, рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ @CodeurSauvage рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

@CodeurSauvage @lineus рд╕рд╣реА рд╣реИ, рдЕрдЧрд░ рдХреЙрд▓рдмреИрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдиреЗрд╡рд▓рд╛ 5 рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рдо рдХрд░рддреА рд╣реИ:

    await model.create({ a: 'test'}, 
       (err,result)=> {console.log('created');});

рд╕рд╛рде рдореЗрдВ:

    await model.create({ a: 'test'}).then(result => console.log('created'));
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rohan-paul picture rohan-paul  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

adamreisnz picture adamreisnz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gustavomanolo picture gustavomanolo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Igorpollo picture Igorpollo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AraanBranco picture AraanBranco  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ