java - Mongodb从数组中删除项目

标签 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 中删除该电子邮件。

这就是我的 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"]}

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

最佳答案

尝试一下,像这样:

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

它应该可以工作。

关于java - Mongodb从数组中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17061665/

相关文章:

java - Java 中 mixin 的示例?

MongoDB 覆盖索引不起作用

sql - 非关系数据库中如何避免冗余数据?

node.js - 显示mongodb中字段值部分匹配的文档

mongodb - 在 mongo 中的日期之间的数组中查找

node.js - 在 $project 阶段 reshape 文档

node.js - 统计 Mongo 中引用对象的数量

java - Hibernate::意外的 token :FOR

java - 保存数据并创建一个不包含该数据的新面板

java - 有没有办法在 JdbcTemplate 上智能设置获取大小?