无法修改 Morphia 中的@Embedded 列表

Can't modify @Embedded List in Morphia

我有以下实体:

@Entity("users")
public class UserModel {
   @Id
   private ObjectId id;
   private String userID;
   private String prefix;
   private List<TodoList> todoLists;
   private List<Reminder> reminders;

TodoList 对象如下所示:

@Embedded
public class TodoList {
    private String name;
    private List<String> todos;
    private List<String> completed;

我想做的是将一个字符串从 todos ArrayList 移动到 TodoList 内完成的 ArrayList, 这是我尝试这样做的方式:

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();
}

这没有任何作用,我不知道哪里出了问题。另外,如果我简单地修改完整的 TodoList,将待办事项从 todos ArrayList 移动到完成的 ArrayList,然后像这样使用 set UpdateOperator:

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();
}

它仍然不起作用,即使我记录了 todo 变量和 userData 并且它看起来都是正确的,我只是无法将它保存到数据库中。

我也试过这个:

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();
}

removeTodo 所在的位置(在 TodoList Embedded class 内):

public String removeTodo(int todoIndex) {
    return todos.remove(todoIndex);
}

好吧,我应该检查我的代码两次。 userData.getId() 似乎不是数据库中用户的正确 ID:/