有没有办法可以通过Java Driver修改MongoDb中某个键的值。我尝试了以下内容:
someCollection.update(DBObject query, DBObject update);
someCollection.findAndModify(DBObject query, DBObject update);
但这两个函数都完全用更新的文档替换查询的文档。在mongo shell中使用$ set的情况下,只更新一个特定键的值的方法是什么。(除了创建一个全新的文档,其中复制了所有字段并更新了其中一个字段)。
答案 0 :(得分:30)
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);
这应该有用,接受的答案不在上面。
答案 1 :(得分:18)
我不是Java专家,但似乎以下代码符合您的需求:
BasicDBObject set = new BasicDBObject("$set", new BasicDBObject("age", 10));
set.append("$set", new BasicDBObject("name", "Some Name");
someCollection.update(someSearchQuery, set);
另请参阅this example。
答案 2 :(得分:1)
前面的回答指出了我正确的方向,但是为更新添加第二个对象的代码对我不起作用。以下是:
BasicDBObject newValues = new BasicDBObject("age", 10);
newValues.append("name", "Some Name");
BasicDBObject set = new BasicDBObject("$set", newValues);
collection.update(someSearchQuery, set);
答案 3 :(得分:0)
上面提到的解决方案都不适合我。我意识到查询应该是Document类型而不是BasicDBObject:
Document set = new Document("$set", new Document("firstName","newValue"));
yourMongoCollection.updateOne(new Document("_id",objectId), set);
“yourMongoCollection”的类型为“MongoCollection”,类型为“ObjectId”的“objectId”
答案 4 :(得分:0)
首先,除非我想重新配置/重新格式化/"重新输入"我的价值观我只能使用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);
}
答案 5 :(得分:0)
根据文档,$set
对$addFields
很有帮助,所以只需使用:
var iterable = collection.aggregate(Arrays.asList(
Aggregates.addFields(new Field("foo", "bar"))
));