MongoDB ลบวัตถุออกจากอาร์เรย์


90

เอกสาร:

{
   _id: 5150a1199fac0e6910000002,
   name: 'some name,
   items: [{
      id: 23,
      name: 'item name 23'
   },{
      id: 24,
      name: 'item name 24'
   }]
}

มีวิธีดึงวัตถุเฉพาะจากอาร์เรย์หรือไม่? IE ฉันจะดึงวัตถุรายการทั้งหมดที่มี id 23 จากอาร์เรย์รายการได้อย่างไร

ฉันเหนื่อย:

db.mycollection.update({'_id': ObjectId("5150a1199fac0e6910000002")}, {$pull: {id: 23}});

อย่างไรก็ตามฉันค่อนข้างมั่นใจว่าฉันไม่ได้ใช้ 'ดึง' อย่างถูกต้อง จากสิ่งที่ฉันเข้าใจว่า pull จะดึงฟิลด์จากอาร์เรย์ แต่ไม่ใช่วัตถุ

แนวคิดใด ๆ ในการดึงวัตถุทั้งหมดออกจากอาร์เรย์

เป็นโบนัสฉันพยายามทำสิ่งนี้ในพังพอน / nodejs และไม่แน่ใจว่าสิ่งประเภทนี้อยู่ใน mongoose API หรือไม่ แต่ฉันหาไม่พบ


1
คุณลองสิ่งนี้แล้วหรือยัง? stackoverflow.com/questions/9048424/…
Myrne Stol

ใช่นั่นคือมัน ขอบคุณ!
lostintranslation

คำตอบ:


153

ลอง..

db.mycollection.update(
    {'_id': ObjectId("5150a1199fac0e6910000002")}, 
    { $pull: { "items" : { id: 23 } } },
false,
true 
);

ใช่ไวยากรณ์ของฉันผิด ขอบคุณ! พยายามโดยไม่ต้องอารมณ์เสียและหลายตัวเลือกและได้ผลเช่นกัน
lostintranslation

12
ค่าบูลีนเหล่านั้นคืออะไร?
Nicolas Del Valle

1
@NicolasDelValle ถ้าจำไม่ผิดนี่คือตัวเลือก upsertและmulti. สำหรับไวยากรณ์และเอกสารปัจจุบันตรวจสอบลิงค์นี้: docs.mongodb.com/manual/reference/method/db.collection.update
Lukas Liesis

7

ฉันมีเอกสารเช่น

ใส่คำอธิบายภาพที่นี่

ฉันต้องลบที่อยู่จากอาร์เรย์ที่อยู่

หลังจากค้นหามากมายบนอินเทอร์เน็ตฉันพบวิธีแก้ปัญหา

Customer.findOneAndUpdate(query, {$pull: {address: addressId}}, function(err, data){
        if(err) {
          return res.status(500).json({'error' : 'error in deleting address'});
        }

        res.json(data);

      });

วิธีการทำใน MongoDB CLI?
Ragesh D Antony

6
my database:->
        {
       "_id" : ObjectId("5806056dce046557874d3ab18"),
       "data" : [ 
           {
               "id" : 1
           }, 
           {
               "id" : 2
           }, 
           {
               "id" : 3
           }
       ]
    }

MY QUERY:->
db.getCollection('play_table').update({},{$pull:{"data":{"id":3}}},{multi:true}
OutPut:->
{
  "_id" : ObjectId("5806056dce046557874d3ab18"),
       "data" : [ 
           {
               "id" : 1
           }, 
           {
               "id" : 2
           }
       ]
    }


3

สำหรับเร็กคอร์ดเดียวในอาร์เรย์:

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true}
);

สำหรับหลายระเบียนที่มีหมายเลขโทรศัพท์มือถือเดียวกันในอาร์เรย์:

db.getCollection('documents').update(
    { },
    {'$pull':{ 'items':{'mobile': 1234567890 }}},
    {new:true,multi:true}
)

1

ใช้$pullเพื่อลบข้อมูล

return this.mobiledashboardModel
.update({"_id": args.dashboardId}, { $pull: {"viewData": { "_id": widgetId}}})
.exec()
.then(dashboardDoc => {
     return {
        result: dashboardDoc
     }
});

0

Kishore Diyyana:

หากคุณต้องการลบองค์ประกอบทั้งหมดรวมถึงคีย์ของรายการแอตทริบิวต์องค์ประกอบ

นี่คือตัวอย่างของ mongoDB unset operator:

db.UM_PREAUTH_CASE.update(
{ 'Id' : 123}, { $unset: { dataElements: ""} } )

JSON มีลักษณะดังนี้:

{ "Id":123,"dataElements" : [ { "createdBy" : "Kishore Babu Diyyana", "createdByUserId" : 2020 }, { "createdBy" : "Diyyana Kishore", "createdByUserId" : 2021 } ] }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.