sql >> Base de Datos >  >> NoSQL >> MongoDB

En mongoDb, ¿cómo elimina un elemento de matriz por su índice?

No hay una forma directa de extraer/eliminar por índice de matriz. De hecho, este es un problema abierto http://jira.mongodb.org/browse/SERVER-1014, puede votar por él.

La solución es usar $unset y luego $pull:

db.lists.update({}, {$unset : {"interests.3" : 1 }}) 
db.lists.update({}, {$pull : {"interests" : null}})

Actualización:como se menciona en algunos de los comentarios, este enfoque no es atómico y puede causar algunas condiciones de carrera si otros clientes leen y/o escriben entre las dos operaciones. Si necesitamos que la operación sea atómica, podríamos:

  • Lea el documento de la base de datos
  • Actualice el documento y elimine el elemento de la matriz
  • Reemplace el documento en la base de datos. Para asegurarnos de que el documento no haya cambiado desde que lo leímos, podemos usar la actualización si el patrón actual se describe en los documentos de mongo