I have the following Entity:
@Entity("users") public class UserModel { @Id private ObjectId id; private String userID; private String prefix; private List<TodoList> todoLists; private List<Reminder> reminders;
The TodoList Object looks like this:
@Embedded public class TodoList { private String name; private List<String> todos; private List<String> completed;
What I’m trying to do is to move a String from the todos ArrayList to the completed ArrayList inside a TodoList, here is how I’m trying to do that:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) { String todo = userData.getTodoLists().get(listIndex).getTodos().remove(todoIndex); datastore.find(UserModel.class) .filter(Filters.eq("userID", userData.getId())) .update(UpdateOperators.set("todoLists." + listIndex + ".todos", userData.getTodoLists().get(listIndex).getTodos()), UpdateOperators.push("todoLists." + listIndex + ".completed", todo)) .execute(); }
This doesn’t do anything and I have no clue of what could be wrong. Also, if I simply modify the full TodoList, moving the todo from the todos ArrayList to the completed ArrayList, and then using the set UpdateOperator like so:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) { userData.getTodoLists().get(listIndex).completeTodo(todoIndex); datastore.find(UserModel.class) .filter(Filters.eq("userID", userData.getId())) .update(UpdateOperators.set("todoLists." + listIndex, userData.getTodoLists().get(listIndex))) .execute(); }
It still doesn’t work, even thought I logged the todo variable and the userData and it all looks correct, I just can’t manage to save it into the DB.
I also tried this:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) { String todo = userData.getTodoLists().get(listIndex).removeTodo(todoIndex); System.out.println(todo); // This logs correctly, so at least the push operator should work datastore.find(UserModel.class) .filter(Filters.eq("userID", userData.getId())) .update(UpdateOperators.set("todoLists." + listIndex + ".todos", userData.getTodoLists().get(listIndex).getTodos()), UpdateOperators.push("todoLists." + listIndex + ".completed", todo)) .execute(); }
where removeTodo is (inside the TodoList Embedded class):
public String removeTodo(int todoIndex) { return todos.remove(todoIndex); }
Advertisement
Answer
Well I should have checked my code twice. It appears that userData.getId() wasn’t the right ID of the user in the database :/