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 damage
value for the items
array element with the matching subDocID
you need to use the $
positional operator to identify that element to the $inc
operator. So it's:
"items.$.damage"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With