MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB/PHP:elimina l'elemento dall'array

Amore,

L'operatore $pull non funzionerà sul documento che stai utilizzando, perché la chiave "notifiche" non è in realtà un array. È piuttosto un documento incorporato, con chiavi numerate, che lo rendono superficialmente simile a un array. Non c'è modo (che io sappia) per mantenere questa struttura del documento e far rinominare automaticamente le chiavi numerate.

Se refactoring leggermente il tuo documento, per assomigliare a questo:

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

Gli elementi saranno ancora numerati, implicitamente. Ora è un array, quindi lo ottieni gratuitamente. Puoi usare l'operatore $pull in questo modo (non ho familiarità con il driver PHP, quindi ti sto dando l'equivalente della shell):

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

Ho usato arbitrariamente la chiave "toUname" per identificare il documento, ma suppongo che vorrai usare il campo _id. Inoltre, sto usando la chiave "id" dei messaggi per identificare il messaggio da estrarre dall'array, poiché è molto più sicuro e si assicura di non rimuovere accidentalmente il messaggio sbagliato nel caso in cui l'array sia cambiato da allora hai identificato l'ordinale dell'array da rimuovere.

Spero di esserti stato d'aiuto.