2013-06-12 58 views
6

我試圖刪除使用Java數組中的元素,並沒有成功刪除項目......的MongoDB從陣列

我有一個「emailsInApp」收集和裏面我有這樣的:

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

它爲每個id保存註冊的電子郵件。

我想要做的是:給定一個id和一個電子郵件,從該appId中刪除該電子郵件。

這是我有個大氣壓,當我運行它,它根本不會改變數組:

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

你能指出我在正確的方向嗎?

編輯: 作爲reccomended通過@Constantine如果我調試它,這是我所得到的:

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

在控制檯:

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

搜索查詢是正確的,但它不會刪除該物品...

+0

確保您在DBCollection參數中有正確的集合名稱,並檢查appId是否真的存在。請用這種方式進行調試,並告訴它是否全部正確。 – user

+0

嗨@Constantine, 謝謝你的回覆。 我用光標測試過它,發現了id。 所以它找到的應用程序,問題是刪除該項目... – HeWhoCodes

回答

7

試一下,像這樣:

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

它應該工作。

+0

非常感謝您的幫助@康斯坦丁。發生這種事的時候,我想的是錯誤的方式,我改變了我的陣列,讓每個電子郵件都有一個ID。 從那裏我更容易維護陣列並解決問題。 你幫我找到正確的方法:) – HeWhoCodes

+0

不客氣! – user