我希望在文档的每次更新中更新MongoDB中的update_at
属性,以便稍后我可以根据上一次update_at字段检索文档。我在这种情况下遇到了两种方式。
在每个DAO调用中更新update_at,如
public void updateMemberDetails(Long memberId, Sring email) {
UpdateOperations<Member> ops = getDs().createUpdateOperations(Member.class);
Query<Member> query = basicQuery(memberId);
ops.set("email", email);
ops.set("update_at", new Date());
getDs().update(query, ops);
}
其他方法是在模型中调用Mongo的生命周期方法(http://mongodb.github.io/morphia/1.4/guides/lifeCycleMethods/)
@PrePersist
public void prePersist() {
update_at = new Date();
}
问题: -
方法1工作得很好,但方法1的唯一缺点是我必须在每个DAO更新方法中添加ops.set("update_at", new Date());
,我不想在每个方法中更新。
在仅在prePersist()
中调用的方法2 operation db.save()
方法中,不在db.update()操作中调用prePersist()方法。因此,当DAO方法调用db.update()时,我无法更新日期。
答案 0 :(得分:1)
这比使用update()
的性能低,因为它会加载对象以进行保存,但是如何:
public void updateMemberDetails(Long memberId, Sring email) {
Datastore ds = getDs();
UpdateOperations<Member> ops = ds.createUpdateOperations(Member.class);
QueryImpl<Member> query = basicQuery(memberId);
Member member = query.get();
member.setEmail(email);
ds.save(member);
}
它还为您提供了将验证逻辑添加到setEmail()
函数中的选项。
注意:get()
方法位于QueryImpl
,位于QueryResults
界面,不属于Query
界面。