使用Java MongoDB驱动程序修改数组元素的值

时间:2016-08-08 16:00:50

标签: mongodb mongodb-java

我想使用Java MongoDB驱动程序修改数组元素。我能够将新对插入到数组中,但不能修改与特定键对应的值。

如何在文档

a数组中将dummy增加2
{ "_id" : ObjectId("57a87614d03a435e4be44bb9"), "dummy" : [ { "a" : 1 }, { "b" : 5 } ] }

使用Java MongoDB驱动程序?

这是我尝试过的

BasicDBObject query = new BasicDBObject();
query.put("_id",doc_id_here); 
BasicDBObject incValue = new BasicDBObject("dummy.$.a", 1);
BasicDBObject intModifier = new BasicDBObject("$inc", incValue); 
coll.update(query, intModifier, false, false, WriteConcern.SAFE);

1 个答案:

答案 0 :(得分:0)

您在mongo shell中的查询

db.collection.update( 
  { "_id": ObjectId("57a87614d03a435e4be44bb9") }, 
  { $inc: { "dummy.$.a": 1 } } 
);

会导致错误

  

位置操作员未找到查询所需的匹配项。   未更新的更新:虚拟。$。a

因为要为dummy数组使用位置 $ 运算符,您需要在查询中为此数组设置条件

db.collection.update( 
  { "_id": ObjectId("57a87614d03a435e4be44bb9"), "dummy.a": { $exists: true } }, 
  { $inc: { "dummy.$.a": 1 } } 
);

然后它会按预期增加a

使用Java MongoDB驱动程序,它将是

BasicDBObject query = new BasicDBObject();
query.put("_id", new ObjectId("57a87614d03a435e4be44bb9"));
query.put("dummy.a", new BasicDBObject("$exists", true));
BasicDBObject incValue = new BasicDBObject("dummy.$.a", 1);
BasicDBObject intModifier = new BasicDBObject("$inc", incValue); 
coll.update(query, intModifier, false, false, WriteConcern.SAFE);

建议:在尝试使用Java MongoDB驱动程序构建查询之前,首先尝试使用mongo shell。