MongoDb在其java驱动程序中的$ set等价物

有没有办法可以通过Java驱动程序修改MongoDb中某个键的值。 我尝试了以下内容:

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

但这两个函数都完全用更新的文档替换查询的文档。 在mongo shell中使用$ set的情况下,只更新特定键的一个值的方法是什么。(除了创建一个全新的文档,其中复制了所有字段并更新了其中一个字段)。

我不是java专家,但似乎以下代码符合您的需求:

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

另请看这个例子 。

 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); 

这应该有效,接受的答案不是正确的。

前面的回答指出了我正确的方向,但是为更新添加第二个对象的代码对我不起作用。 以下做了:

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

上面提到的解决方案都不适合我。 我意识到查询应该是Document类型而不是BasicDBObject:

 Document set = new Document("$set", new Document("firstName","newValue")); yourMongoCollection.updateOne(new Document("_id",objectId), set); 

其中“yourMongoCollection”的类型为“MongoCollection”,类型为“ObjectId”的“objectId”

首先,除非我想重新配置/重新格式化/“重新输入”我的值,否则我只能使用findAndModify不是 update

以下是用于c&p目的的完整工作示例…享受:

  Boolean updateValue(DB db, DBCollection collection, String id, String key, Object newValue) { DBCollection collection = db.getCollection(); // Identify your required document (id, key, etc...) DBObject query = new BasicDBObject("_ID",); 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); }