2011-12-08 10 views
1

私はJavaドライバでのMongoDBを使用して、各エントリについて、次の形式でコレクションの質問」を持っている:私は何をしたいかMongoDBとJava:私のアップデートで何が問題になっていますか?

{ 
    "question" : "How are you?", 
    "category" : "personal", 
    "isTrain" : true, 
    "processed" : true 
} 

は、「処理」と「isTrainの両方を持つすべてのエントリを取ることです"trueに等しいので、" processed "値をfalseに設定します。私はこのために使用しようとしていているコードは次のとおりです。

public void markUnprocessed(boolean isTrain) { 
    BasicDBObject queryObj = new BasicDBObject(); 
    queryObj.put("processed", true); 
    queryObj.put("isTrain", isTrain); 

    BasicDBObject updateObj = new BasicDBObject(); 
    updateObj.put("processed", false); 

    collection.updateMulti(queryObj, updateObj); 
} 

が私のコードからこの関数を呼び出す効果がないようだ、と私はなぜわかりません。この問題に関する助けをいただければ幸いです。

おかげで、あなたは部分使用して$の集合ではなく、完全な更新を実行する必要があり
クリス隠密

+1

isTrainをtrueに設定して呼び出していますか? – Thilo

+0

はい、正しいです。 –

+0

私は実際にisTrain = falseを他の場所でも呼び出すので、それらのエントリを未処理としてマークすることもできますが、どちらもうまくいかないようです。 –

答えて

2

。 現在のステートメントでは、他のフィールドはすべて失われます。

BasicDBObject updateObj = new BasicDBObject(); 
updateObj.put("$set", new BasicDBObject("processed", false)); 

また、サーバーからエラーが通知されるように安全な書き込み(WriteConcern.SAFEを使用)を有効にする必要があります。

+0

ああ、私は今どこかでオンラインで '$ set'構文を見ていましたが、あなたはそれについて言及していますが、Java表現をどうやって作るのか分かりませんでした。助けてくれてありがとう! –

関連する問題