Tamim Fahed نشر 21 يونيو 2021 أرسل تقرير نشر 21 يونيو 2021 (معدل) لدي مستند فيه مصفوفات بالشكل التالي: address: { localAddresses: [ { street: "St123", city: "New Jersey", country: "USA" } { street: "Ava Revenue-111", city: "Houston", country: "USA" } ] } وأحاول إزالة الحقل street من المصفوفة localAdresses من خلال استخدام unset كالتالي: update( { _id: id}, { $unset: { 'address.localAddresses.$.street': 'Ava Revenue-111'} } ); ولكن لم يتم إزالة هذا الحقل بشكل كامل من المصفوفة. كيف يمكنني إزالته بالشكل الصحيح؟ تم التعديل في 21 يونيو 2021 بواسطة Tamim Fahed 1 اقتباس
1 Sam Ahw نشر 21 يونيو 2021 أرسل تقرير نشر 21 يونيو 2021 يمكنك استخدام التابع pull كالتالي: update( { _id: id }, { $pull: { 'address.localAddresses': { street: 'Ava Revenue-111' } } } ); حيث ستقوم بالبحث عن المستند من خلال الرقم المعرّف الفريد id، وتقوم بإزالة الحقل street والقيمة الموافقة له من المصفوفة localAddresses. والتي تم الوصول إليها عن طريق استخدام dot notation ( address.localAddresses) لأنه عند استخدام unset سيبقى الحقل street موجود كونه من أصل بنية المستند ضمن هذه المصفوفة الفرعية ولكن عندها سيتم وضع القيمة null بدلاً من القيمة "Ava Revenue-111" 2 اقتباس
0 Salah Eddin Beriani2 نشر 21 يونيو 2021 أرسل تقرير نشر 21 يونيو 2021 حاليا لا أظن ان هناك عملية بسيطة للقيام بذلك ولك يمكنك ذلك عن طريق استخدام شيفرة مشابهة db.coll.find({_id:id}).forEach( function(doc) { const arr = doc.address.localAddresses; const length = arr.length; for (var i = 0; i < length; i++) { if( arr[i]["street"] === 'Ava Revenue-111'){ delete arr[i]["street"]; } } db.coll.save(doc); }); اقتباس
0 سمير عبود نشر 21 يونيو 2021 أرسل تقرير نشر 21 يونيو 2021 إبتداءً من الإصدار 3.6 اصبح بالإمكان التعديل على عدة عناصر بداخل مصفوفة بحيث يُمكنك إستخدام positional identifier بالشكل التالي: db.collection.update({}, { $unset: { "address.localAddresses.$[].street": true } }) $[] تقوم بحذف كل الخاصيات street من المصفوفة localAddresses، يعمل كعنصر نائب لتحديث جميع العناصر في المصفوفة. بإمكانك تجربة المثال من: هنا إن أردت الحذف المتعدد من عدة مستندات إستخدم multi: true بالشكل التالي: db.collection.update({}, { $unset: { "address.localAddresses.$[].street": true } }, { multi: true }) اقتباس
السؤال
Tamim Fahed
لدي مستند فيه مصفوفات بالشكل التالي:
address: { localAddresses: [ { street: "St123", city: "New Jersey", country: "USA" } { street: "Ava Revenue-111", city: "Houston", country: "USA" } ] }
وأحاول إزالة الحقل street من المصفوفة localAdresses من خلال استخدام unset كالتالي:
update( { _id: id}, { $unset: { 'address.localAddresses.$.street': 'Ava Revenue-111'} } );
ولكن لم يتم إزالة هذا الحقل بشكل كامل من المصفوفة. كيف يمكنني إزالته بالشكل الصحيح؟
تم التعديل في بواسطة Tamim Fahed3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.