我只能找到如何删除第一个,最后一个或选定的对象
但我需要删除整个数组。
在Morphia,我有以下Document
FriendList
。
在Document
中,您会看到array
friendList
我需要使用新的array
更新此"friends"
。
我需要删除friendList
中的所有条目
在与新朋友填充之前。
我想我可以删除它,然后只需插入一个新的
array
friendList
包含"friends"
。
如何删除array
?
也许我对如何做到这一点都错了,因为我找不到解决方案..
@Entity
public class FriendList {
@Id private ObjectId id;
public Date lastAccessedDate;
@Indexed(name="uuid", unique=true,dropDups=true)
private String uuid;
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);
}
}
来自documentation的我尝试了各种组合而没有运气:
mongo.createUpdateOperations(FriendList.class).removeAll("friendList", "??");
答案 0 :(得分:2)
您可以使用unset方法,然后使用addAll或只使用set:
http://code.google.com/p/morphia/wiki/Updating#set/unset
应该是这样的:
ops = datastore.createUpdateOperations(FriendList.class).unset("friendList");
datastore.update(updateQuery, ops);
ops = datastore.createUpdateOperations(FriendList.class).addAll("friendList", listOfFriends);
datastore.update(updateQuery, ops);
或使用set:
ops = datastore.createUpdateOperations(FriendList.class).set("friendList", listOfFriends);
datastore.update(updateQuery, ops);
答案 1 :(得分:-2)
通常,您只需要使用常规(Java)列表操作 - 因此要清除它,将列表设置为null,根据需要删除或添加条目,...所以您可以简单地加载,操作和然后很容易坚持实体。
为什么你有mongo.createUpdateOperations(FriendList.class)
?如果一个对象非常大,您可能不想加载并持久化整个事物来更新单个字段。但是,我会从简单的方法开始,只在需要时才使用更复杂的查询。
不要过早优化 - 根据需要进行构建,基准测试和优化!
编辑:
在您的实体中:
public function clearFriends(){
this.friendList = null;
}
您需要的任何地方:
FriendList friendList = ...
friendList.clearFriends();
persistence.persist(friendList); // Assuming you have some kind of persistence service with a persist() method
或者你可以使用一些特殊的Morphia方法,比如unset,但这可能是一种矫枉过正......