MongoDB и Java: что не так с моим обновлением? - PullRequest
1 голос
/ 08 декабря 2011

Я использую MongoDB с драйвером Java и у меня есть коллекция «Вопросы» со следующим форматом для каждой записи:

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

То, что я хочу сделать, - это принять каждую запись, в которой значение «обработано» и «isTrain» равно true, и я хочу установить для их значения «обработано» значение 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 Ответ

2 голосов
/ 08 декабря 2011

Вам необходимо выполнить частичное использование $ set, а не полное обновление.С текущим оператором вы потеряете все остальные поля.

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

Также обратите внимание, что вы должны включить безопасную запись (используя WriteConcern.SAFE), чтобы ваше приложение получало уведомление о любой ошибке с сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...