Mongo / Java findAndReplace不工作

我有像这样的Mongo系列
email{
"isConfirmed" : true/[or false]
"email" : "xxxxxxxxxxx"
}
当我尝试将
isConfirmed
字段更​​新为true或false时,取决于显然是唯一的电子邮件,需要很长时间。 我使用的编程语言是Java 这是我的代码。
List<String> clientEmails = new ArrayList<String>();

Mongo mongoConnection = new Mongo();

DB mongoDatabase = mongoConnection.getDB(DB_NAME);

DBCollection mongoCollection = mongoDatabase.getCollection(COLLECTION_NAME);

int size = clientEmails.size();

for(int i=0;
i
<
size; i++)

{

    BasicDBObject query = new BasicDBObject();

    System.out.println(clientEmails.get(i).toString());

    query.put("email.email", clientEmails.get(i).toString());

    BasicDBObject Update = new BasicDBObject("$set", new   BasicDBObject("email.isConfirmed", false));

    mongoCollection.update(query, Update); 
这个需要很长时间才能完成包含大约3500个条目的集合]
  //mongoCollection.findAndModify(query, Update);
即使findAndModify根本不起作用,我也不确定我是否遗漏了一些东西 但是,我尝试使用DBcursor,它可以工作,但运行大约需要3分钟。
//             DBCursor cursor = mongoCollection.find(query);
//

//             while(cursor.hasNext()){

//                 BasicDBObject Update = new BasicDBObject("$set", new BasicDBObject("email.isConfirmed", true));

//                 mongoCollection.update(cursor.next(), Update);
//             }
此方法大约需要3分钟。有人可以建议我解决方法或什么?     
已邀请:
你有关于email.email的索引吗?如果不是,则每次调用update时,查询都必须执行完整的集合扫描以查找正确的文档。 您也可能希望运行mongostat一段时间以查看可能导致速度减慢的其他情况。 mongostat -h将解释所有字段的含义。     
如果您使用IDE(如Eclipse),也可以下载mongo java驱动程序源代码。设置断点   mongoCollection.findAndModify(query,Update);   进入java驱动程序,实际上你可以找到发送到mongo的excatlly cmd字符串。还有来自mongo db的实际结果,它可以为您提供更多信息。你也可以复制/粘贴cmd字符串并放入mongo shell,看看接下来会发生什么。 我遇到了findAndModify方法的问题,通过我说的故障排除,发现我的代码中使用了错误的'COLLECTION_NAME'。 我正在使用mongo v1.8和java驱动程序v2.5.3,这个方法适合我。     

要回复问题请先登录注册