sql >> Database >  >> NoSQL >> MongoDB

object verwijderen uit geneste reeks objecten mongodb

U kunt dit doen door iets op te geven dat overeenkomt met het "document" en vervolgens het vereiste array-item "shifts" op te geven als de query-expressie voor een .update() . Pas vervolgens de positionele $ toe operator voor de overeenkomende array-index met $pull :

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

Dat is oké in dit geval, aangezien je alleen probeert te "matchen" op de "buitenste" array in de geneste structuur en de $pull heeft eigen query-argumenten om de array-invoer te identificeren die moet worden verwijderd.

Je moet echt voorzichtig zijn met het gebruik van "geneste arrays". Zoals terwijl een $pull bewerking als deze werkt, zijn updates van de "innerlijke" array niet echt mogelijk omdat de positionele $ operator komt alleen overeen met het "eerste" element dat aan de voorwaarde voldoet. Dus uw voorbeeld van "Mary Mack" in meerdere ploegen komt alleen overeen met de eerste gevonden "ploegen"-array.



  1. Kan MongoDB /data/db-map niet maken op macOS Catalina

  2. mongodb - array-subset ophalen

  3. MongoDB georuimtelijk verschil tussen $near en $within

  4. mongodump Mislukt:slechte optie:kan slechts één verzameling naar stdout dumpen