Mongoose: إزالة من المصفوفة [معرف الكائن]

تم إنشاؤها على ٢٤ مايو ٢٠١١  ·  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 }
});

وظيفة حذف معرف الكائن: 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);

شكرا.

رد: السؤال الأول ، لا يهم ، يصل إلى التفضيل الشخصي

رد: السؤال الثاني ، ما هي الطريقة الأفضل؟

كما هو الحال في أكثر كفاءة / أسرع.
لاحظت أيضًا أن .pop (...) يمكن أن يواجه مشاكل عند إفراغ المصفوفة ، وإلقاء حقل "لا يمكن حفظه غير محدد" بعد استدعاء وظيفة me.save (رد الاتصال) ، بينما تعمل إزالة () بشكل جيد - ومن ثم أسأل.

لا ، يجب أن يكون push() بأسرع ما يمكن مع الاستمرار في استخدام save() . يمكنك أيضًا إجراء me.update({}, { $push: { friend: uid } }).then() ، والذي سيكون أسرع بشكل هامشي عن طريق تجاوز البرامج الوسيطة ، والتحقق من الصحة ، وما إلى ذلك ، لكنه لن يحسن زمن الوصول الإجمالي كثيرًا.

رد: مشاكل pop() ، هل يمكنك فتح مشكلة منفصلة مع تتبع المكدس والبرنامج النصي الذي يعيد إنتاج هذه المشكلة من فضلك؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات