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
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.