Search code examples
javamongodbmongodb-java

How to Update a Value with MongoDB


I want to add 1 point to a user each time he does something. So, I did this to create the user if not found and give him 1 point. I am stuck where I don't know how to update the value and add 1 point.

//Add One Point
   Document memberdoc = new Document("Username", event.getAuthor().getName());
   Document found = (Document) collection.find(memberdoc).first();
   if (found == null){
      memberdoc.append("Points", 1);
      memberdoc.append("UserID", event.getAuthor().getId());
      collection.insertOne(memberdoc);
      membersDataHashMap.put(event.getAuthor().getId(), new MembersData(event.getAuthor().getName(), event.getAuthor().getId(), 1));
    }else{
         String  id = found.getString("UserID");
         int points = found.getInteger("Points");
         membersDataHashMap.put(event.getAuthor().getId(), new MembersData(event.getAuthor().getId(),id,points + 1));
    }
//End

Solution

  • You need to use $inc operator with updateOne method of db.collection. For more details have a look official documentation of mongodb

    In your case you can use it in the else condition as follows:

        //Add One Point
        Document memberdoc = new Document("Username", event.getAuthor().getName());
        Document found = (Document) collection.find(memberdoc).first();
        if (found == null){
            memberdoc.append("Points", 1);
            memberdoc.append("UserID", event.getAuthor().getId());
            collection.insertOne(memberdoc);
            membersDataHashMap.put(event.getAuthor().getId(), new MembersData(event.getAuthor().getName(), event.getAuthor().getId(), 1));
        }else{
            String  id = found.getString("UserID");
            int points = found.getInteger("Points");
            collection.updateOne(
                eq("UserID", found.getString("UserID")),
                new Document("$inc", new Document("Points", 1))
            );
            membersDataHashMap.put(event.getAuthor().getId(), new MembersData(event.getAuthor().getId(),id,points + 1));
        }
        //End
    

    Focus on below part only:

    collection.updateOne(
            eq("UserID", found.getString("UserID")),
            new Document("$inc", new Document("Points", 1))
        );
    

    Which will find the matching user and increment the column Points by 1. Hope this will resolved your problem.