2013-06-12 17 views
6

Sto cercando di rimuovere un elemento da una matrice utilizzando Java e non sono riuscito ...MongoDB rimuovere elemento dalla matrice

Ho una collezione "emailsInApp" e dentro ho questo:

{ "_id" : "750afe", "list" : [ "[email protected]", "[email protected]" ] } 
{ "_id" : "711850", "list" : [ "[email protected]" ] } 

Contiene per ogni ID le e-mail registrate.

Quello che mi piacerebbe fare è: dato un ID e una e-mail, rimuovi quella email da quella appId.

Questo è quello che ho atm e quando l'eseguo non cambia l'array a tutti:

DBCollection emailsApp = db.getCollection(EmailsInAppColl); 
BasicDBObject queryEmail = new BasicDBObject(); 
queryEmail.put("_id", appId); 
BasicDBObject updateEmailCommand = new BasicDBObject(); 
updateEmailCommand.put("$pull", new BasicDBObject("list", email)); 
emailsApp.update(queryEmail, updateEmailCommand, true, true); 

Mi può puntare nella giusta direzione per favore?

Edit: Come consigliato da @Constantine se metto a punto che questo è ciò che ottengo:

DBCollection emailsApp = db.getCollection(EmailsInAppColl); 
queryEmail.put("_id", appId); 
DBCursor cursor = emailsApp.find(queryEmail); 
System.out.println("######*****"+cursor.next()); 

Nella console:

#####*****{ "_id" : "711850" , "list" : [ "[email protected]" , "[email protected]" , "[email protected]" , "[email protected]"]} 

La query di ricerca è corretto, ma non rimuove la voce ...

+0

Assicurati di avere il nome raccolta corretto nel parametro DBCollection e controlla se l'appId esiste realmente. Si prega di eseguire il debug in questo modo e dire se è tutto corretto. – user

+0

Ciao @Constantine, Grazie per la risposta. L'ho provato usando un cursore e ha trovato l'id. Quindi è trovare l'applicazione, il problema è rimuovere l'elemento ... – HeWhoCodes

risposta

7

provare qualcosa, come questo:

BasicDBObject match = new BasicDBObject("_id", appId); //to match your direct app document 
BasicDBObject update = new BasicDBObject("list", email); 
coll.update(match, new BasicDBObject("$pull", update)); 

Dovrebbe funzionare.

+0

Grazie mille per l'aiuto @ Costantino. Succede che stavo pensando nel modo sbagliato, ho cambiato il mio array per avere un ID relativo a ogni email. Da lì è più semplice per me mantenere l'array e risolvere il problema. Mi aiuti a trovare la strada giusta :) – HeWhoCodes

+0

Siete i benvenuti! – user

Problemi correlati