6

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

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

{ "_id" : "750afe", "list" : [ "John@gmail.com", "Mike@gmail.com" ] }
{ "_id" : "711850", "list" : [ "example@gmail.com" ] }

它为每个 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);

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

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

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

在控制台中:

#####*****{ "_id" : "711850" , "list" : [ "example@gmail.com" , "peanut@gmail.com" , "chewie@gmail.com" , "gold@gmail.com"]}

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

4

1 回答 1

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

它应该工作。

于 2013-06-12T12:32:29.000 回答