mongo morphia как безопасно удалить строку из массива строк

#arrays #mongodb #morphia

#массивы #mongodb #morphia

Вопрос:

хорошо, у меня есть это (снова новичок)
.

 // ADD FRIEND TO FRIEND LIST   
Query<FriendList> query1 = mongo.createQuery(FriendList.class);   
query1.field("lowerCaseUserName").equal(on.lowerCaseUserName);  
query1.field("passwordHash").equal(on.passwordHash);
query1.field("uuid").equal(on.uuid);
UpdateOperations<FriendList>up1=mongo.createUpdateOperations(FriendList.class).add("friendList",buddyUuid,false);
  

Я вставляю друга в Array . «Список друзей» — это String Array .
Хотелось бы иметь возможность реализовать удаление сейчас.

Могу ли я просто написать тот же код и заменить « .add » на removexxx … что-нибудь? Я думаю, что это хорошая среда разработки, но, возможно, нет 🙂

 @Entity
public class FriendList {

    @Id private ObjectId id;

    public Date lastAccessedDate;

    @Indexed(name="uuid", unique=true,dropDups=true)  
    private String uuid;

    @Indexed(value=IndexDirection.ASC, name="lowerCaseUserName", unique=true,dropDups=true)  
    public String lowerCaseUserName;

    public String passwordHash = "";

    List<String> friendList;

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public List<String> getFriendList() {
        return friendList;
    }

    public void insertFriend(String friend) {
        this.friendList.add(friend);
    }
//  @PrePersist void prePersist() {
//      lastAccessedDate = new Date();
//  }
}
  

Ответ №1:

 Query<FriendList> query1 = mongo.createQuery(FriendList.class);   
query1.field("lowerCaseUserName").equal(on.lowerCaseUserName);  
query1.field("passwordHash").equal(on.passwordHash);
query1.field("uuid").equal(on.uuid);
UpdateOperations<FriendList>up1=mongo.createUpdateOperations(FriendList.class).removeAll("friendList",buddyUuid);
  

Это должно удалить строку buddyUuid из списка.

Если бы вы могли гарантировать, что friendList содержит уникальные идентификаторы UUID, вы могли бы использовать removeFirst || removeLast метод.

Удалить первый / последний / Все

Надеюсь, это поможет!

Комментарии:

1. Спасибо. Я не был уверен в этом, потому что в примере не показано, как создается «Запрос обновления». Я протестировал это сейчас, и это работает отлично.