Как обновить значение с MongoDB - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу добавить 1 очко пользователю каждый раз, когда он что-то делает.Итак, я сделал это, чтобы создать пользователя, если он не найден, и дать ему 1 балл.Я застрял там, где я не знаю, как обновить значение и добавить 1 балл.

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

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Вам необходимо использовать $inc оператор с updateOne методом db.collection. Для более подробной информации смотрите Официальную документацию mongodb

В вашем случае вы можете использовать его вусловие else следующее:

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

Сосредоточиться только на нижней части:

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

, которая найдет подходящего пользователя и увеличит столбец Points на1. Надеюсь, что это решит вашу проблему.

0 голосов
/ 20 декабря 2018

Вы можете использовать $ inc для увеличения значения.

...