sql >> Databasteknik >  >> NoSQL >> MongoDB

tar bort objekt från kapslad array av objekt mongodb

Du kan göra detta genom att ange något som matchar "dokumentet" och sedan den obligatoriska "shifts"-arrayposten som frågeuttrycket för en .update() . Använd sedan positionella $ operatör för det matchade arrayindexet med $pull :

db.collection.update(
 { "_id": ObjectId("59180305c19dbaa4ecd9ee59"), "shifts.timeslot": "8:00 - NOON" },
 { "$pull": { "shifts.$.volunteers": { "fullname": "Mary Mack" } } }
)

Det är okej i det här fallet eftersom du bara försöker "matcha" på den "yttre" arrayen i den kapslade strukturen och $pull har egna frågeargument för att identifiera arrayposten som ska tas bort.

Du bör verkligen vara försiktig med att använda "kapslade arrayer". Som medan en $pull operation som denna fungerar, uppdateringar av den "inre" arrayen är inte riktigt möjliga eftersom positionell $ operatör kommer bara att matcha det "första" elementet som uppfyller villkoret. Så ditt exempel på "Mary Mack" i flera skift skulle bara någonsin matcha i den första "skift"-arrayposten som hittades.



  1. @DBRef hämtar inte data när du använder Spring Data Mongo

  2. Hur ansluter man till Atlas M0 (Free Tier)-kluster korrekt via Java-drivrutin?

  3. Loopback ValidationError:"Role"-instansen är inte giltig. Detaljer:`namn` finns redan (värde:admin)

  4. Mapreduce i mongodb