2013-06-12 5 views
6

J'essaie de supprimer un élément d'un tableau en utilisant Java et n'ont pas réussi ...MongoDB Supprimer l'élément de tableau

J'ai une collection « emailsInApp » et à l'intérieur, j'ai ceci:

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

Il contient pour chaque identifiant les emails enregistrés.

Ce que je voudrais faire est: donné un id et un email, enlève cet email de ce appId.

C'est ce que je atm et quand je le lance, il ne change pas le tableau du tout:

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); 

Pourriez-vous me diriger dans la bonne direction s'il vous plaît?

Edit: Comme reccomended par @Constantine si je déboguer ce que je reçois:

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

Dans la console:

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

La requête de recherche est correct, mais il ne supprime pas l'élément ...

+0

Assurez-vous que vous avez le bon nom de collection dans le paramètre DBCollection et vérifiez si l'appId existe réellement. S'il vous plaît, déboguez-le de cette façon et dites si tout est correct. – user

+0

Bonjour @Constantine, Merci pour la réponse. Je l'ai testé en utilisant un curseur et il a trouvé l'identifiant. Donc, il est de trouver l'application, le problème est de supprimer l'élément ... – HeWhoCodes

Répondre

7

Essayez quelque chose, comme ceci:

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)); 

Cela devrait fonctionner.

+0

Merci beaucoup pour l'aide @Constantine. Il arrive que je pensais dans le mauvais sens, j'ai changé mon tableau pour avoir un identifiant lié à chaque email. De là, il est plus facile pour moi de maintenir le tableau et de résoudre le problème. Vous m'aidez à trouver le bon chemin :) – HeWhoCodes

+0

Vous êtes les bienvenus! – user

Questions connexes