مرحبا،
كيف يمكنني إزالة 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);
هذه الوظيفة جميلة!
هل هناك طريقة للقيام بذلك على مستندات متعددة على النحو التالي؟
User.update({
friends: uid
}, {
'$pull': {
friends: uid
}
})
البحث عن إجابة لنفس السؤال (أعلاه). كيف تفعل هذا لوثائق متعددة؟
jhickner حاول $pullAll
. http://docs.mongodb.org/manual/reference/operator/update/pullAll/
رائع
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()
، هل يمكنك فتح مشكلة منفصلة مع تتبع المكدس والبرنامج النصي الذي يعيد إنتاج هذه المشكلة من فضلك؟
التعليق الأكثر فائدة
لا تستخدم لصق.