Mongodb从数组中删除项目

时间:2013-06-12 09:07:19

标签: java mongodb mongodb-query nosql

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

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

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

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

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

编辑: 正如@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"]}

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

1 个答案:

答案 0 :(得分: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));

它应该有用。