$ Установить эквивалент MongoDb в его Java-драйвере - PullRequest
25 голосов
/ 09 февраля 2011

Есть ли способ, которым я могу изменить значение одного из ключей в MongoDb через его драйвер Java.Я опробовал следующее:

someCollection.update(DBObject query, DBObject update);
someCollection.findAndModify(DBObject query, DBObject update);

Но обе функции полностью заменяют запрашиваемый документ обновленным документом.Какой способ обновить только одно значение определенного ключа, как в случае использования $ set в оболочке mongo (кроме создания совершенно нового Document со всеми скопированными полями и одним из обновленных полей).

Ответы [ 5 ]

30 голосов
/ 26 апреля 2012
BasicDBObject carrier = new BasicDBObject();
BasicDBObject query = new BasicDBObject();
query.put("YOUR_QUERY_STRING", YOUR_QUERY_VALUE);

BasicDBObject set = new BasicDBObject("$set", carrier);
carrier.put("a", 6);
carrier.put("b", "wx1");        
myColl.updateMany(query, set);

Это должно сработать, ответ, который принят не прямо выше.

18 голосов
/ 09 февраля 2011

Я не эксперт по Java, но, кажется, следующий код соответствует вашим потребностям:

BasicDBObject set = new BasicDBObject("$set", new BasicDBObject("age", 10));
set.append("$set", new BasicDBObject("name", "Some Name");
someCollection.update(someSearchQuery, set);

Также посмотрите на этот пример .

1 голос
/ 12 октября 2011

Предыдущий ответ указал мне правильное направление, но код для добавления второго объекта в обновление не работал для меня. Сделали следующее:

BasicDBObject newValues = new BasicDBObject("age", 10);
newValues.append("name", "Some Name");
BasicDBObject set = new BasicDBObject("$set", newValues);
collection.update(someSearchQuery, set);
0 голосов
/ 13 октября 2017

Во-первых, если я не хочу переконфигурировать / переформатировать / "переписать" мои значения, я бы пошел только с findAndModify и , а не update.

полностью рабочий пример для целей c & p ... Наслаждайтесь:

    Boolean updateValue(DB db, DBCollection collection, String id, String key, Object newValue)
    {
        DBCollection collection = db.getCollection(<collection name>);

        // Identify your required document (id, key, etc...)
        DBObject     query      = new BasicDBObject("_ID",<ID or key value>);
        DBObject     update     = new BasicDBObject("$set", new BasicDBObject(key, newValue));

        //These flags will guarantee that you'lls get the updated result
        DBObject     result     = collection.findAndModify(query, null, null, false, update,true, true);

        //Just for precaution....
        if(result == null)
            return false;

        return result.get(key).equals(newValue);
    }
0 голосов
/ 12 декабря 2016

Ни одно из упомянутых выше решений не помогло мне. Я понял, что запрос должен быть типом Document, а не BasicDBObject:

Document set = new Document("$set", new Document("firstName","newValue"));

yourMongoCollection.updateOne(new Document("_id",objectId), set);

Где "yourMongoCollection" имеет тип "MongoCollection" и "objectId" типа "ObjectId"

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