MongoDB, nesneyi diziden kaldır


90

Doc:

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

Bir diziden belirli bir nesneyi çekmenin bir yolu var mı? IE 23 no'lu tüm item nesnesini items dizisinden nasıl çekerim.

Denedim:

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

Ancak 'çekme'yi doğru kullanmadığımdan oldukça eminim. Anladığım kadarıyla pull bir diziden bir alan çekecek ama bir nesneden değil.

Tüm nesnenin diziden nasıl çıkarılacağına dair herhangi bir fikir.

Bonus olarak, bunu mongoose / nodejs'de yapmaya çalışıyorum ve bu tür bir şeyin firavun faresi API'sinde olup olmadığından emin değilim ama bulamadım.



evet işte bu. Teşekkürler!
lostintranslation

Yanıtlar:


153

Deneyin..

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

evet, sözdizimim yanlıştı. Teşekkürler! Ayrıca üzgün ve çoklu seçenekler olmadan denendi ve bu da işe yaradı.
lostintranslation

12
Bu boole değerleri nelerdir?
Nicolas Del Valle

1
@NicolasDelValle eğer doğru hatırlıyorsam bunlar seçeneklerdi upsertve multi. Mevcut sözdizimi ve belgeler için şu bağlantıyı kontrol edin: docs.mongodb.com/manual/reference/method/db.collection.update
Lukas Liesis

7

Gibi bir belgem var

görüntü açıklamasını buraya girin

Adres dizisinden adresi silmem gerekiyor

İnternette çok sayıda arama yaptıktan sonra çözümü buldum

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'da bu nasıl yapılır?
Ragesh D Antony

6

Ayrıca deneyebilirsiniz:

db.getCollection('docs').update({ },{'$pull':{ 'items':{'id': 3 }}},{multi:true})

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
           }
       ]
    }

3

Dizideki tek bir kayıt için:

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

Dizide aynı cep telefonu numarasına sahip birden çok kayıt için:

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

1

$pullVerileri kaldırmak için kullanın

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

0

Kishore Diyyana:

Öğe öznitelikleri listesinin anahtarı dahil tüm öğeleri kaldırmak istiyorsanız. Burada mongoDB unset operatörü örneği:

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

JSON Şuna benzer:

{"Kimlik": 123, "dataElements": [{"createdBy": "Kishore Babu Diyyana", "createdByUserId": 2020}, {"createdBy": "Diyyana Kishore", "createdByUserId": 2021}]}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.