我想使用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);
答案 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。