2013-06-12 23 views
6

Java kullanarak bir diziden bir öğe kaldırmak için çalışıyorum ve başarılı olmamıştır öğeyi kaldırmak Bunu alabilir içeride:mongodb <p></p> Ben bir "emailsInApp" koleksiyonu var ve ... dizinin

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

Her bir kimlik için kayıtlı e-postaları tutar.

Yapmak istediğim şudur: bir kimlik ve bir e-posta verildiğinde, bu e-postayı bu uygulamadan kaldırın.

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

doğru yönde bana lütfen gösterebilir misiniz:

Bu benim atm var ve bunu çalıştırdığınızda hiç de diziyi değiştirmez nedir?

Düzenleme: Ben bu bana seni mi hata ayıklama ise @Constantine kurumlarda tarafından gibi:

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

konsolunda:

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

arama sorgusu doğrudur ama kaldırmaz böyle madde ...

+0

DBCollection parametresinde doğru toplama adına sahip olduğunuzdan emin olun ve appId'nin gerçekten var olup olmadığını kontrol edin. Lütfen, bu şekilde hata ayıklayın ve doğru olup olmadığını söyleyin. – user

+0

Merhaba @Constantine, Cevabınız için teşekkür ederiz. Bir imleç kullanarak test ettim ve kimliği buldu. Bu yüzden uygulamayı buluyor, sorun öğeyi kaldırıyor ... – HeWhoCodes

cevap

7

deneyin şey:

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

Çalışmalı.

+0

@Constantine için çok teşekkürler. Yanlış şekilde düşünüyordum, dizimi her e-postayla ilgili bir kimlik alacak şekilde değiştirdim. Buradan diziyi sürdürmem ve sorunu çözmem benim için daha kolay. Doğru yolu bulmama yardım edin :) – HeWhoCodes

+0

Rica ederim! – user