Mongoose: λ°°μ—΄[ObjectId]μ—μ„œ 제거

에 λ§Œλ“  2011λ…„ 05μ›” 24일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: Automattic/mongoose

μ•ˆλ…•ν•˜μ„Έμš”,

ObjectId λ°°μ—΄μ—μ„œ ObjectIdλ₯Ό μ œκ±°ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

λ‚΄ λͺ¨λΈ:

var User = new Schema({
    title       : { type : String,  index: true },
    name        : String,
    friends     : [ObjectId],
    join_at     : {type:Date, default:Date.now },
    save_at     : {type:Date, default:Date.now }
});

objectId μ‚­μ œ ν•¨μˆ˜ : uid

User.findOne({'_id' : self.id}, function(err, me){
    for(var i=0; i<=me.friends.length; i++){
        if (String(me.friends[i])==String(uid)){
            me.friends.splice(i, 1);
            break;                          
        }
    }
    me.save(function(err,us){
        next(err,'kljlmjk'+JSON.stringify(me));
    });     
});                                     

응닡해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

접합을 μ‚¬μš©ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.

me.friends.remove(uid);
me.save(callback);

λͺ¨λ“  10 λŒ“κΈ€

접합을 μ‚¬μš©ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€.

me.friends.remove(uid);
me.save(callback);

κ·Έ κΈ°λŠ₯은 아름닡닀!

λ‹€μŒκ³Ό 같이 μ—¬λŸ¬ λ¬Έμ„œμ— 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

User.update({
    friends: uid
}, {
    '$pull': {
        friends: uid
    }
})

이 λ™μΌν•œ μ§ˆλ¬Έμ— λŒ€ν•œ 닡변을 μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€(μœ„). μ—¬λŸ¬ λ¬Έμ„œμ— λŒ€ν•΄ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

ν›Œλ₯­ν•œ

@bnoguchi μ•ˆλ…•ν•˜μ„Έμš”, 이것은 였래된 μŠ€λ ˆλ“œλΌλŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ Google의 첫 번째 κ²Œμ‹œλ¬Όμž…λ‹ˆλ‹€(μ—¬κΈ°μ„œ 해결책을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€).
κ·ΈλŸ¬λ‚˜ 완전성을 μœ„ν•΄ κ°„λ‹¨ν•œ μ§ˆλ¬Έμž…λ‹ˆλ‹€. μ„ ν˜Έν•˜λŠ” μ‚¬μš©λ²•:

me.friend.remove(uid);
me.save(callback);

λ˜λŠ”:

me.friends.pull(uid);
me.save(callback);

λ˜ν•œ (즉, push() 에 λŒ€ν•œ 더 λ‚˜μ€ λŒ€μ•ˆ) λŒ€μ‹  μƒˆ "친ꡬ"λ₯Ό μ‚½μž…ν•˜λŠ” 더 μ •ν™•ν•œ 방법이 μžˆμŠ΅λ‹ˆκΉŒ?

me.friend.push(uid);
me.save(callback);

감사 ν•΄μš”.

Re: 첫 번째 μ§ˆλ¬Έμ€ 개인 μ·¨ν–₯에 따라 μ€‘μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Re: 두 번째 질문, μ–΄λ–€ λ©΄μ—μ„œ 더 λ‚˜μ€κ°€μš”?

κ·ΈλŒ€λ‘œ 더 효율적으둜/λΉ λ₯΄κ²Œ.
λ˜ν•œ .pop(...) 은 배열을 λΉ„μšΈ λ•Œ λ¬Έμ œκ°€ μžˆμ„ 수 있으며 me.save(callback) ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ ν›„ "cannot save undefined" ν•„λ“œλ₯Ό throwν•˜λŠ” 반면 remove()λŠ” μ •μƒμ μœΌλ‘œ μž‘λ™ν•œλ‹€λŠ” 사싀을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ•„λ‹ˆμš”, push() λŠ” save() μ‚¬μš©ν•˜λ©΄μ„œ μ΅œλŒ€ν•œ 빨라야 ν•©λ‹ˆλ‹€. me.update({}, { $push: { friend: uid } }).then() 도 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 미듀웨어, μœ νš¨μ„± 검사 등을 μš°νšŒν•˜μ—¬ μ•½κ°„ 더 λΉ¨λΌμ§€μ§€λ§Œ 전체 λŒ€κΈ° μ‹œκ°„μ΄ λ„ˆλ¬΄ 많이 ν–₯μƒλ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

Re: pop() 문제, μŠ€νƒ 좔적과 이 문제λ₯Ό μž¬ν˜„ν•˜λŠ” 슀크립트둜 λ³„λ„μ˜ 문제λ₯Ό μ—΄ β€‹β€‹μˆ˜ μžˆμŠ΅λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰