Значение MongoDb $равноценно в своем java-драйвере
Есть ли способ изменить значение одного из ключей в MongoDb через его драйвер Java. Я пробовал следующее:
someCollection.update(DBObject query, DBObject update);
someCollection.findAndModify(DBObject query, DBObject update);
Но обе функции полностью заменяют запрошенный документ обновленным документом. Каким образом можно обновить только одно значение определенного ключа, как в случае использования $set в оболочке mongo (кроме создания полностью нового документа со всеми скопированными полями и обновлением одного из полей).
Ответы
Ответ 1
Я не эксперт java, но, похоже, следующий код соответствует вашим потребностям:
BasicDBObject set = new BasicDBObject("$set", new BasicDBObject("age", 10));
set.append("$set", new BasicDBObject("name", "Some Name");
someCollection.update(someSearchQuery, set);
Также посмотрите этот пример.
Ответ 2
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);
Это должно работать, ответ, который принимается, не является правильным.
Ответ 3
Предыдущий ответ указал мне в правильном направлении, но код для добавления второго объекта к обновлению не работал у меня. Было сделано следующее:
BasicDBObject newValues = new BasicDBObject("age", 10);
newValues.append("name", "Some Name");
BasicDBObject set = new BasicDBObject("$set", newValues);
collection.update(someSearchQuery, set);
Ответ 4
Ни одно из упомянутых выше решений не помогло мне. Я понял, что запрос должен быть типом Document, а не BasicDBObject:
Document set = new Document("$set", new Document("firstName","newValue"));
yourMongoCollection.updateOne(new Document("_id",objectId), set);
Где "yourMongoCollection" имеет тип "MongoCollection" и "objectId" типа "ObjectId"
Ответ 5
Во-первых, если я не хочу перенастроить/переформатировать/ "перепечатать" мои значения, я бы пошел только с 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);
}