2013-06-12 37 views
6

Tôi đang cố gắng để loại bỏ một phần tử từ một mảng sử dụng Java và đã không thành công ...MongoDB loại bỏ mục từ mảng

Tôi có một "emailsInApp" thu thập và bên trong tôi có điều này:

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

Nó giữ cho mỗi id email đã đăng ký.

Điều tôi muốn làm là: được cung cấp id và email, xóa email đó khỏi ứng dụng đó.

Đây là những gì tôi có atm và khi tôi chạy nó nó không thay đổi mảng ở tất cả:

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

Ông có thể chỉ cho tôi đi đúng hướng không?

Edit: Như reccomended bởi @Constantine nếu tôi gỡ lỗi nó đây là những gì tôi nhận được:

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

Trong giao diện điều khiển:

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

Các truy vấn tìm kiếm là đúng nhưng nó không loại bỏ mặt hàng ...

+0

Đảm bảo bạn có tên bộ sưu tập phù hợp trong tham số DBCollection và kiểm tra xem appId có thực sự tồn tại hay không. Xin vui lòng, gỡ lỗi theo cách này và cho biết nếu nó là tất cả chính xác. – user

+0

Xin chào @Constantine, Cảm ơn bạn đã trả lời. Tôi đã thử nghiệm nó bằng cách sử dụng một con trỏ và nó tìm thấy id. Vì vậy, ứng dụng đang tìm ứng dụng, sự cố đang xóa mục ... – HeWhoCodes

Trả lời

7

Hãy thử một cái gì đó, như thế này:

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

Nó sẽ hoạt động.

+0

Cảm ơn bạn rất nhiều vì đã giúp @Constantine. Nó xảy ra tôi đã suy nghĩ một cách sai lầm, tôi đã thay đổi mảng của mình để có một id liên quan đến mỗi email. Từ đó, tôi dễ dàng duy trì mảng và giải quyết vấn đề. Bạn giúp tôi tìm đúng cách :) – HeWhoCodes

+0

Bạn được hoan nghênh! – user