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

MongoDB $pop


No MongoDB, você pode usar o $pop operador para remover o primeiro ou o último elemento de uma matriz.

Use $pop em conjunto com um método como update() para atualizar o documento especificado com a alteração.

Use -1 para remover o primeiro elemento e 1 para remover o último.

Exemplo


Suponha que tenhamos uma coleção chamada products com os seguintes documentos:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

Remover o primeiro elemento


Podemos remover o primeiro elemento do array no documento 1 assim:
db.products.update( 
  { _id: 1 }, 
  { $pop: { sizes: -1 } } 
)

Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Essa mensagem nos diz que um documento correspondeu e um (ou seja, o mesmo documento) foi modificado.

Vejamos agora a coleção:
db.products.find()

Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

Podemos ver que o primeiro elemento do array no documento 1 foi removido.

Remover o último elemento


Agora vamos remover o último elemento do array no documento 2:
db.products.update( 
  { _id: 2 }, 
  { $pop: { sizes: 1 } } 
)

Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Agora vamos verificar a coleção novamente:
db.products.find()

Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L", "XL" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M", "L" ] }

Podemos ver que o último elemento foi removido do array no documento 2.

Atualizar todos os documentos


Aqui está um exemplo que usa o updateMany() método para atualizar todos os documentos:
db.products.updateMany( 
  { }, 
  { $pop: { sizes: 1 } } 
)

Saída:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }

E reveja a coleção:
db.products.find()

Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "M", "L" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "M" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "S", "M" ] }

Alternativamente, você pode usar o update() método para atualizar vários documentos especificando multi: true .