If I have a MongoDB collection with documents and sub-documents, as illustrated:

And, if I want to increment the “damage” by 1 each time the method is called:
private final static void incrementCount(String docID, String subDocID) {
BasicDBObject query = new BasicDBObject();
query.put("_id", docID);
query.put("items.id", subDocID);
BasicDBObject incValue = new BasicDBObject("damage", 1); // or "items.damage" ???
BasicDBObject intModifier = new BasicDBObject("$inc", incValue);
badgesCollection.update(query, intModifier, false, false, WriteConcern.SAFE);
}
Question: do I refer to “damage” or “items.damage” ?
Neither. If you want to increment just the
damagevalue for theitemsarray element with the matchingsubDocIDyou need to use the$positional operator to identify that element to the$incoperator. So it’s: