Updating (incrementing) a value within a sub-docum

2020-06-21 06:51发布

问题:

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" ?

回答1:

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"