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

MongoDB/PHP:eliminar elemento de la matriz

Amor,

El operador $pull no funcionará en el documento que está utilizando, porque la clave de "notificaciones" no es realmente una matriz. Es más bien un documento incrustado, con claves numeradas, lo que hace que se parezca superficialmente a una matriz. No hay forma (que yo sepa) de mantener la estructura de este documento y cambiar el nombre de las claves numeradas automáticamente.

Si refactoriza su documento ligeramente, para que se vea así:

{
   "notifications": [
    {
       "type": "privateMessage",
       "fromUname": "Eamorr2",
       "time": 1292773522,
       "id": "1lfw70h789u13a1e67pv"
    },
    {
       "type": "privateMessage",
       "fromUname": "Eamorr2",
       "time": 1292773522,
       "id": "iwoidjsoskqp23nlwof"
    }
  ],
   "toUname": "Eamorr"
}

Los elementos seguirán estando numerados, implícitamente. Ahora es una matriz, así que la obtienes gratis. Puedes usar el operador $pull de esta manera (no estoy familiarizado con el controlador de PHP, así que te doy el equivalente de shell):

db.messages.update({ "toUname" : "Eamorr" }, { $pull : { "notifications" : { "id" : "1lfw70h789u13a1e67pv" }}});

Utilicé arbitrariamente la clave "toUname" para identificar el documento, pero supongo que querrá usar el campo _id. Además, estoy usando la clave "id" de los mensajes para identificar el mensaje que se extraerá de la matriz, ya que es mucho más seguro y se asegura de que no elimine accidentalmente el mensaje incorrecto en caso de que la matriz haya cambiado desde entonces. identificó el arreglo ordinal para eliminar.

Espero que eso ayude.