0

このようなMongoコレクションがあります

email{
"isConfirmed" : true/[or false]
"email" : "xxxxxxxxxxx"
}

フィールドを真または偽に更新しようとすると、isConfirmed明らかに一意の電子メールに応じて、時間がかかります。

私が使っているプログラミング言語は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 分です。誰かが私に回避策などを提案できますか?

4

2 に答える 2

0

email.email のインデックスはありますか? そうでない場合、更新を呼び出すたびに、クエリは完全なコレクション スキャンを実行して正しいドキュメントを見つける必要があります。

また、しばらくの間 mongostat を実行して、スローダウンの原因となっている可能性のある他に何が起こっているかを確認することもできます。mongostat -h は、すべてのフィールドの意味を説明します。

于 2011-02-03T18:36:30.587 に答える