Mongodb从数组中删除项目

HeW*_*lds 6 java mongodb nosql mongodb-query

我正在尝试使用Java从数组中删除一个元素并且没有成功...

我有一个"emailsInApp"集合,里面我有这个:

{ "_id" : "750afe", "list" : [ "John@gmail.com", "Mike@gmail.com" ] }
{ "_id" : "711850", "list" : [ "example@gmail.com" ] }
Run Code Online (Sandbox Code Playgroud)

它为每个id保留已注册的电子邮件.

我想要做的是:给一个ID和一封电子邮件,从该appId中删除该电子邮件.

这就是我的atm,当我运行它时它根本不会改变数组:

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);
Run Code Online (Sandbox Code Playgroud)

你能指点我正确的方向吗?

编辑:正如@Constantine推荐的那样,如果我调试它,这就是我得到的:

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

在控制台中:

#####*****{ "_id" : "711850" , "list" : [ "example@gmail.com" , "peanut@gmail.com" , "chewie@gmail.com" , "gold@gmail.com"]}
Run Code Online (Sandbox Code Playgroud)

搜索查询是正确的但它不会删除该项目...

use*_*ser 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));
Run Code Online (Sandbox Code Playgroud)

它应该工作.