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

No mongoDb, como você remove um elemento de matriz por seu índice?


Não há uma maneira direta de puxar/remover pelo índice da matriz. Na verdade, esta é uma questão aberta http://jira.mongodb.org/browse/SERVER-1014 , você pode votar nele.

A solução alternativa é usar $unset e depois $pull:
db.lists.update({}, {$unset : {"interests.3" : 1 }}) 
db.lists.update({}, {$pull : {"interests" : null}})

Atualização:como mencionado em alguns dos comentários, essa abordagem não é atômica e pode causar algumas condições de corrida se outros clientes lerem e/ou gravarem entre as duas operações. Se precisarmos que a operação seja atômica, poderíamos:
  • Leia o documento do banco de dados
  • Atualize o documento e remova o item da matriz
  • Substitua o documento no banco de dados. Para garantir que o documento não foi alterado desde que o lemos, podemos usar o padrão update if atual descrito nos documentos do mongo