μμ μ μ μ₯νκΈ° μν΄ μ½μ λ°ν μ§μμ μΆκ°νκ³ νμ¬ μ μλμ§ μμ λ°νν©λλ€. μ λ°μ΄νΈν΄μΌ νλ μ ν¨μ± κ²μ¬ λ° μ μ₯ μνμ λ°λΌ μ¬λ¬ λ°ν κ²½λ‘κ° μμ΅λλ€. μ΄λ κ² νλ©΄ μ€μ²© λμ .then()μ μ¬μ©νμ¬ μ¬λ¬ μ μ₯ μμ μ μ°κ²°ν μ μμ΅λλ€.
λλ μ΄κ²μ 4.xμ λͺ©λ‘μ μΆκ°νκ³ μμ΅λλ€. λ―Έλ€μ¨μ΄ ꡬν λ°©μ(hooks.js)κ³Ό κ΄λ ¨μ΄ μμ΅λλ€.
κ΅μ₯ν©λλ€. κ°μ¬ν©λλ€. λ΄ νλ‘μ νΈμ λν mongoose Promise κ°μ²΄μ νμ₯μΌλ‘ jqueryμ .when λ²μ μ ꡬννμ΅λλ€. κ·Έκ²μ΄ λΉμ μ΄ ν 리νμ€νΈμ κ΄μ¬μ κ°μ§λ§ν κ²μ λκΉ?
var p1 = Users.find();
var p2 = Animals.find();
Promise.when(p1, p2).addBack(function(err, μ¬μ©μ, λλ¬Ό) {
//λ±
});
κ³ λ§μ§ λ§ μ¬μ ν κ². λͺ½κ΅¬μ€ μΈλΆμμ ꡬνν μ μλ κΈ°λ₯μ λ μΆκ°νκ³ μΆμ§λ μμ΅λλ€. μ΄λ―Έ λΆνμ΄ μ¬λμ΅λλ€.
μ΄ μ€λ λλ₯Ό μ°Ύλ λ€λ₯Έ μ¬λλ€μ μν΄ μ¬κΈ°μ μμ΅λλ€: https://github.com/wshaver/mongoosewhen
@wshaver λ κ·Έκ²μ npmμ κ²μνκ³ mongoose νκ·Έλ₯Ό μΆκ°νμ¬ http://plugins.mongoosejs.com μ νμλλλ‘ ν©λλ€.
λ€λ₯Έ Mongoose νλ¬κ·ΈμΈμ μ΄λ¦μ λμ μ¬μ©μ μ€μνκΈ° μν΄ https://github.com/wshaver/mongoose-when μΌλ‘ μ΄λνμ΅λλ€.
npmμ κ²μλκ³ νκ·Έκ° μ§μ λμμ΅λλ€. μμ§ λνλμ§λ μμμ§λ§ μ§μ°μ΄ μμ μ μμ΅λλ€.
@wshaver λ©μ§λ€. ν루μ ν λ² μ λ°μ΄νΈλ©λλ€.
#1446μ νν€μΉ ν "hooks.js"λ₯Ό μ κ±°νμ§ μκ³ λ μ΄κ²μ λ¬μ±ν μ μλ€κ³ μκ°ν©λλ€.
μ΄λ‘λΆ?
κ·Έκ²μ μν΄ κ°μμμ€
2013λ 10μ 7μΌ μμμΌμ Refael Ackermannμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
#1446 https://github.com/LearnBoost/mongoose/issues/1446 μ νν€μΉ ν "hooks.js"λ₯Ό μ κ±°νμ§ μκ³ λ μ΄κ²μ λ¬μ±ν μ μλ€κ³ μκ°ν©λλ€.
μ΄λ‘λΆ?β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ Gi tHubhttps://github.com/LearnBoost/mongoose/issues/1431#issuecomment -25792310μμ νμΈνμΈμ.
.
μλ‘
@aaronheckmann https://twitter.com/#!/aaronheckmann
soundcloud.com/ajhecky
github.com/aheckmann
λΉ PR μ€λΉ
μ΄κ²μ μ μκ²λ μ λ§ λμμ΄ λ κ²μ λλ€. myDoc.save().exec()λ₯Ό νΈμΆν μ μμ΄μΌ ν©λλ€. λ°λΌμ κΈ°λ³Έμ μΌλ‘ saveλ μ€νν μ μλ 쿼리λ₯Ό λ°νν΄μΌ ν©λλ€. λλ Saveκ° Queryλ₯Ό λ°ννμ§ μλ μ΄μ λ 무μμ λκΉ?
μ½λ°±μ μλ΅νλ©΄ μ½μ λ°νμ λν΄ +1
μμ μ¬νμ master
λΆκΈ°μ μμΌλ©° 3.10μ ν¬ν¨λ μμ μ
λλ€.
μ¬κΈ°μλ λͺ¨λΈ μμ± μμ μ λν΄ λ°νλ μ½μμ΄ ν¬ν¨λ©λκΉ?
@GDownes create()
λ μ΄λ―Έ μ½μμ λ°νν©λλ€ :) http://mongoosejs.com/docs/api.html#model_Model.create
3.10μ λν κ³νλ λ¦΄λ¦¬μ€ λ μ§κ° μμ΅λκΉ? :)
@swayf 4.0μ μμ§ λͺ κ°μ λ¨μμ΅λλ€. λͺ¨λ μμ λ΄ λΌμΈμ 9μ 2μΌμ΄μ§λ§ κ·Έ μ μ λ°λλλ€ :)
μ΄κ²μ΄ μμ§ λ€μ λ²μ μΌλ‘ μμ λμ΄ μμ΅λκΉ?
μ, μ΄κ²μ 4.0μ μμ μμ μ΄μ§λ§ μμ§ λ¦΄λ¦¬μ€ λ μ§κ° μμ΅λλ€. λ§μ§λ§ 견μ μ΄ μ ννμ§ μμμ΅λλ€ :(
:+1:
+1 μ΄μ :
νν¬ μ μ mocha ν
μ€νΈμμ 2κ°μ λ¬Έμλ₯Ό μ μ₯ν΄μΌ νλ©° μ΄ κΈ°λ₯μ μ¬μ©νλ©΄ λ λͺ¨λΈμ΄ λͺ¨λ μ μ₯λλ©΄ done()
μ½λ°±μ μ€νν μ μμ΅λλ€.
Collection.insert([docs], done)
λ©μλλ₯Ό μ¬μ©ν΄ 보μμ§λ§ μΌλΆ κ°μ ν΄μν΄μΌ νλ Schema.pre('save')
λ
Όλ¦¬λ₯Ό νΈλ¦¬κ±°νμ§ μμ΅λλ€.
@arathael νμ λΉλκΈ° λͺ¨λμ μ¬μ©νμ¬ λ λ¬Έμλ₯Ό async.parallel
μ μ μ₯νκ³ μ½λ°±μμ μλ£λ₯Ό μ€νν μ μμ΅λλ€.
κ°μ¬ν©λλ€. μ§κΈ μ€μ λ‘ ν μ€νΈ μ€μ λλ€. ODMμ κΈ°λ³Έ μ§μμ΄ νλ€λ¦΄ κ² κ°μμ κ·Έλ₯ λ°μ΄λ€μμ΅λλ€.
+1
μ λ 6to5λ₯Ό μ¬μ©νμ¬ μ€νμ μΈ ES7 await/asyncλ₯Ό μ¬μ©ν©λλ€. record.save()κ° μ½μμ λ°ννλ©΄ λ€μκ³Ό κ°μ΄ ν μ μμ΅λλ€.
try {
await record.save()
} catch(err) {
...
}
μ§κΈμ λ€μκ³Ό κ°μ΄ νκ³ μμ΅λλ€.
userSchema.methods.saveAsync = function() {
return new Promise((resolve,reject) => {
this.save((err) => {
if(err) return reject(err)
resolve()
})
})
}
@aaronshaf μ κ²½μ° +1, μ μκ² μ μλν©λλ€. ES6μ μ¬μ©νμ§ μλ μ¬λλ€μ μν΄ ES5μλ μμ±νκ² μ΅λλ€. κ°μ¬ ν΄μ
μ¬κΈ° λ΄κ° μ§κΈ ν μΌμ΄ μμ΅λλ€. λΆλͺ ν Qλ νμνμ§ μμ§λ§ λ€λ₯Έ κ³³μμ μ½μμ μ¬μ©νλ κ²μ λλ€.
/*
* Hack until mongoose 3.10 comes out. See this: https://github.com/LearnBoost/mongoose/issues/1431
*/
mongoose.Document.prototype.savePromise = function () {
var that = this;
return Q.Promise(function(resolve, reject) {
that.save(function (err, item, numberAffected) {
if (err) {
reject(err);
}
resolve(item, numberAffected);
});
});
};
mongoose.Document.prototype.removePromise = function () {
var that = this;
return Q.Promise(function(resolve, reject) {
that.remove(function (err, item) {
if (err) {
reject(err);
}
resolve(item);
});
});
};
ν΄νΉ @jhullfly μμ +1νμ§λ§ Qμ ν΄κ²°μ νλμ μΈμλ§ μ·¨νλ―λ‘ numberAffectedκ° μμ λκ³ λ λ€μ μ‘μΈμ€νλ €λ©΄ λ°°μ΄μ΄λ 무μΈκ°μ λ£μ΄μΌ νλ€κ³ μκ°ν©λλ€.
mongoose.Document.prototype.savePromise = function () {
var that = this;
return Q.Promise(function(resolve, reject) {
that.save(function (err, item, numberAffected) {
if (err) {
reject(err);
}
resolve([item, numberAffected]);
});
});
};
μ μ₯μμ λ°νλ μ½μμ λν΄ 1+!
μ΄μ save
λ 4.0.1μμ μ½μμ λ°νν©λλ€. 건배.
+1
@arathael +1
save
κ° Promiseμ ν¨κ» μ¬μ©λλ λ°©μκ³Ό κ΄λ ¨λ λ¬Έμκ° μμ΅λκΉ?
λ€μμ μλνμ§λ§ μλνμ§ μλ κ² κ°μ΅λλ€.
var User = mongoose.model('User');
var u = new User();
u.save().then(function() {
// never gets here.
});
// I even tried the following, and neither works.
u.save().then(function() {}).end();
mongoose 4.0.1μ μ¬μ© μ€μ΄κ³ npmμΌλ‘ μ€μΉνμ΅λκΉ?
@Ouwen μ, μ λ 4.0.1μ μ€ν μ€μ΄λ©° μ, κ·Έλ μ§ μμΌλ©΄ mongooseκ° μ€μΉλμ§ μμ κ²½μ° μ€λ₯κ° λ°μνμ κ²μ λλ€.
λ¬Έμ λ then
κ° νΈμΆλμ§ μλ κ² κ°μ΅λλ€. λλ λ΄κ° μ΄μν μΌμνκ³ μλ€κ³ νμ νμ§λ§ (κ·Έλ μ§ μμΌλ©΄ λ²κ·Έκ° 빨리 μ κΈ° λ κ²μ
λλ€) μ΄μ λ₯Ό μ μ μμ΅λλ€. μ£Όλ³μ μμ /λ¬Έμκ° μλμ§ κΆκΈν©λλ€.
ν , λ§€μ° μ΄μν©λλ€. λλ 3.8.8μ μ€ν μ€μ΄κ³ 4.0.1κΉμ§ npm installνλ κ²μ μμλ€λ κ²μ μκ³ μμ΅λλ€. μ΄κ²μ΄ u.save()μμ μ½μμ΄ λ°νλμ§ μμ μ΄μ μ λλ€
μμ±ν λ΄μ©μ΄ μλν΄μΌ ν©λλ€.
@limianwang mongodb μλ²μ μ±κ³΅μ μΌλ‘ μ°κ²°νκ³ μμ΅λκΉ? μ΄κ²μ μ¬ννλ λ 립 μ€νν μμ λ₯Ό μ 곡ν μ μμ΅λκΉ?
.save()μ μν΄ λ°νλ promise κ°μ²΄λ λ€λ₯Έ promiseμ κ°μ§ μκ³ onReject λμ catch/caughtκ° μλ κ² κ°μ΅λλ€.
λͺ½κ΅¬μ€ 4.1.10 λ° ...
var u = new User();
u.save().then(...)
μ¬μ ν μ½μμ λ°ννμ§ μμ΅λλ€
@xrado μ’ λ μ€μ§μ μΈ μλ₯Ό μ 곡ν΄μ£ΌμΈμ. mongoose 4.1.10μμ μλν΄μΌ ν¨μ 보μ¬μ£Όλ ν μ€νΈκ° μμ΅λλ€.
@vkarpov15 λ΄ λμ, λλ κ·Έκ²μ λ€μ μλνκ³ μλν©λλ€ ..λ΄κ° μ μ 무μμνκ³ μμλμ§ ..μ£μ‘ν©λλ€
λλ κ°μ λ¬Έμ κ° μμ΅λλ€. Saveλ λ°μ΄ν°λ₯Ό dbμ μ¦μ μ μ₯νκ³ κ·Έλ μ½λλ₯Ό νΈμΆνμ§ μμ΅λλ€. μ΄μν μ μ then λΈλ‘μ νΈμΆν λ λ€λ₯Έ μ½λμ ννκ° μμκ³ μ½μμ΄ μλνλ€λ κ²μ λλ€.
μ½λ( user.save() λΆλΆμμ μ μ₯ν λ€μ μ μλμ§ μμμ§λ§ νΈμΆλμ§ μμ)
user.save().then( function(userX) { // μ μ₯ μμ
console.log(2); // νΈμΆλμ§ μμ
}).end() // νΈμΆλμ§ μμ
.then(μ μλμ§ μμ, ν¨μ(μ€λ₯){
console.log('err:' + err ); // νΈμΆλμ§ μμ
});
μ λ°μ΄νΈλ μ΄μ λ°©μμ μ¬μ©νμΌλ©° λ€μκ³Ό κ°μ΄ μλν©λλ€.
user.save(ν¨μ(err, newuser) {
if (err) console.log('err=' + err);
console.log('μ μ₯λ μ¬μ©μ');
});
κ·Έλ° λ€μ user.save().then( function(userX) { // μ μ₯μ΄ μλν©λλ€.
console.log(2);
}).λ()
.then(μ μλμ§ μμ, ν¨μ(μ€λ₯){
console.log('err:' + err );
});
곡μ₯!!!!!!!!!!! λ¬μ½€ν....
@nickjohngray μμλ΄μ κΈ°μ©λλ€ :) κ·Έλλ mongooseμ ν¨κ» Promiseλ₯Ό κ³μ μ¬μ©νκΈ° μ μ λ¬Έμμμ Promise κ°μ΄λ λ₯Ό μ½λ κ²μ΄ μ’μ΅λλ€. κ±±μ νμ§ λ§μΈμ. 짧μ κΈμ λλ€.
κ°μ λ¬Έμ κ° μμ΅λλ€ ... μ½μ λ΄μμ μμ νκΈ° μν΄ μ μ₯μ μ»κΈ° μν΄ μ 체 μ£Όμ 릴리μ€λ₯Ό λ€μ΄ κ·Έλ μ΄λνμ§ μμλλκΈ°λ₯Ό λ°λλλ€.
@jhyland87 λ¬Έμ κ° λ¬΄μμΈμ§ νμΈν μ μλλ‘ μ½λ μνμ μ 곡νμΈμ.
@vkarpov15 λ΄κ° κ·Έλ¬μ΄, ν°μΌ μμ
μ΄κ²μ λ€λ₯Έ ν°μΌμμ μμ λμμ΅λλ€ ...
κΈ°λ³Έμ μΌλ‘ μ΄ μ½λλ λ€μκ³Ό κ°μ΅λλ€.
var User = mongoose.model('User');
var u = new User();
u.save().then(function() {
// never gets here.
});
λ¬Έμλ₯Ό μ μ₯ν λ μΆκ°λ return
κ° νμνμ΅λλ€. κ·Έλμ:
var User = mongoose.model('User');
var u = new User();
return u.save().then(function() {
// never gets here.
});
@jhyland87 , μ°Έκ³ λ‘ - Mongooseμ μ½μμ μ°κ²°νλ λ λ€λ₯Έ μμ λλ€.
μ΄κ²μ΄ μ¬μ ν λ¬Έμ μ λκΉ?
λ€μ μ½λκ° μμ΅λλ€(TypeScript μ¬μ©)...
User.findById(id)
.exec()
.then((user) => {
user.name = 'new name from wherever!';
return user.save();
})
.then((user) => {
// want to do more stuff with the user object once it has been saved successfully...
// ... but it never makes it here!!!
};
κ·Έλ¬λ save()
ν¨μμ λΉ μ½λ°±μ μΆκ°νλ©΄ μλμ κ°μ΄ λͺ¨λ κ²μ΄ μ 보μ
λλ€.
User.findById(id)
.exec()
.then((user) => {
user.name = 'new name from wherever!';
return user.save(() => {
// unwanted empty callback... hmmm?
});
})
.then((user) => {
// we made it here!!! but now...
// user === undefined :(
};
λΉμ μ μ½μμ μ¬μ©νκ³ μμ΅λκΉ? mongoose.Promise = global.Promise;
(μΌ)λ‘ μ νν΄ λ³΄μΈμ.
κ°μ₯ μ μ©ν λκΈ
μ§κΈμ λ€μκ³Ό κ°μ΄ νκ³ μμ΅λλ€.