MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

pullAll ao remover objetos incorporados


O $pullAll O operador é na verdade um atalho de "caso especial" que funciona em matrizes com apenas valores neles, como seu caso alternativo.

O que você realmente quer é $pull e seu argumento é uma "consulta" para os documentos contidos no array. Portanto, sua lista se torna um argumento para $in :
db.bios.update(
   { "name.first": "James" },
   { 
      "$pull": { 
         "awards": { "by": { "$in": ["Stockholm", "Hollywood"] } } 
      } 
   }
)

Então, em seu outro exemplo, uma forma mais longa de $pullAll seria:
db.bios.update(
   { "name.first": "James" },
   {
       "$pull": { "contribs": { "$in": ["Java","UNIX"] } }
   }
)

Mesma coisa, mas apenas a forma "longhand".