MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

pullAll beim Entfernen eingebetteter Objekte

Der $pullAll Der Operator ist eigentlich eine Abkürzung für "Sonderfälle", die mit Arrays funktioniert, die nur Werte enthalten, wie z. B. Ihr alternativer Fall.

Was Sie wirklich wollen, ist $pull und sein Argument ist eine "Abfrage" für die im Array enthaltenen Dokumente. Ihre Liste wird dann also zu einem Argument für $in :

db.bios.update(
   { "name.first": "James" },
   { 
      "$pull": { 
         "awards": { "by": { "$in": ["Stockholm", "Hollywood"] } } 
      } 
   }
)

In Ihrem anderen Beispiel also eine längere Form von $pullAll wäre:

db.bios.update(
   { "name.first": "James" },
   {
       "$pull": { "contribs": { "$in": ["Java","UNIX"] } }
   }
)

Dasselbe, aber nur die "Longhand"-Form.