MongoDB, hapus objek dari array

90

Dokter:

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

Apakah ada cara untuk menarik objek tertentu dari array? IE bagaimana cara menarik seluruh objek item dengan id 23 dari array items.

Saya telah mencoba:

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

Namun saya cukup yakin bahwa saya tidak menggunakan 'tarik' dengan benar. Dari apa yang saya pahami, tarik akan menarik bidang dari array tetapi bukan objek.

Ada gagasan tentang cara menarik seluruh objek keluar dari larik.

Sebagai bonus, saya mencoba melakukan ini di luwak / nodejs, juga tidak yakin apakah hal ini ada di API luwak tetapi saya tidak dapat menemukannya.

hilang dalam terjemahan
sumber
1
Sudahkah kamu mencobanya? stackoverflow.com/questions/9048424/…
Myrne Stol
iya tuh. Terima kasih!
lostintranslation

Jawaban:

153

mencoba..

db.mycollection.update(
    {'_id': ObjectId("5150a1199fac0e6910000002")}, 
    { $pull: { "items" : { id: 23 } } },
false,
true 
);
sambomartin
sumber
yup, sintaks saya salah. Terima kasih! Juga mencoba tanpa opsi kesal dan multi dan itu berhasil juga.
lostintranslation
12
Apa sajakah nilai boolean itu?
Nicolas Del Valle
1
@NicolasDelValle jika saya ingat dengan benar, ini adalah opsi upsertdan multi. Untuk sintaks & dokumentasi saat ini, periksa tautan ini: docs.mongodb.com/manual/reference/method/db.collection.update
Lukas Liesis
7

Saya memiliki dokumen seperti

masukkan deskripsi gambar di sini

Saya harus menghapus alamat dari array alamat

Setelah mencari banyak di internet saya menemukan solusinya

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

        res.json(data);

      });
Deepak Sisodiya
sumber
Bagaimana cara melakukan ini di MongoDB CLI?
Ragesh D Antony
6

Anda juga bisa mencobanya:

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})
Shubham Verma
sumber
5
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
           }
       ]
    }
Viral Patel
sumber
3

Untuk satu record dalam array:

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

Untuk beberapa catatan dengan nomor ponsel yang sama dalam larik:

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

Gunakan $pulluntuk menghapus data

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

Kishore Diyyana:

Jika Anda ingin menghapus semua elemen termasuk kunci dari daftar atribut elemen. Berikut adalah contoh operator mongoDB unset:

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

JSON Terlihat seperti ini:

{"Id": 123, "dataElements": [{"createBy": "Kishore Babu Diyyana", "createByUserId": 2020}, {"createBy": "Diyyana Kishore", "createByUserId": 2021}]}

Kishore BABU Diyyana
sumber