BlackJoker
BlackJoker

Reputation: 3191

How do I update Map field without retrieve it in a MongoDB document?

I have a document with an Map field, similar to this:

{ 
  "_id" : "....",
  "metaMap" : {
     "k1":"v1",
     "k2":"v2",
     //...
  }
}

How can I update(add or replace some key-value pair) the metaMap field without retrieve the whole map?

For example,when update with the parameter {"k2":"new-v2","k3":"v3"} the document become like this:

{ 
      "_id" : "....",
      "metaMap" : {
         "k1":"v1",
         "k2":"new-v2",
         "k3":"v3",
         //...
      }
    }

I'm using spring-data-mongodb.

Upvotes: 0

Views: 1780

Answers (1)

pvpkiran
pvpkiran

Reputation: 27078

    DBObject queryObject = new BasicDBObject("someUniqueField", "value");
    BasicDBObject newMap = new BasicDBObject("metaMap.k2", "new-v2");
    newMap.put("metaMap.k3", "v3");
    DBObject updateObject = new BasicDBObject("$set", newMap);

    mongoTemplate.getCollection("collectionName").update(queryObject, updateObject);

Upvotes: 1

Related Questions