ドキュメントから 、MorphiaはNull / Empty値(デフォルト)を保存しないため、クエリ
query.and(
query.criteria("createdDate").exists(),
query.criteria("createdDate").notEqual(null)
);
nullでクエリを実行できないように見えるため、機能しませんが、特定の値をクエリすることはできます。
ただし、クエリできるのは特定の値のみであるため、createdDate
を更新できる回避策を考案できます。 モデルで使用されることのない日付値を持つフィールド。たとえば、Dateオブジェクトを0で初期化すると、エポックの先頭である1970年1月1日00:00:00UTCに設定されます。取得する時間は、ローカライズされた時間オフセットです。更新にmongoシェルの一致する要素の変更のみが含まれている場合は十分であるため、次のようになります。
db.users.update(
{"createdDate": null },
{ "$set": {"createdDate": new Date(0)} }
)
その後、 FluentInterface を使用できます。 その特定の値を照会するには:
Query<User> query = mongoDataStore
.find(User.class)
.field("createdDate").exists()
.field("createdDate").hasThisOne(new Date(0));
createDateフィールドを更新するprePersistメソッドを含めるようにモデルを定義する場合は、はるかに簡単です。メソッドは@PrePersist
でタグ付けされています 保存される前に注文に日付が設定されるように注釈を付けます。 @PostPersist
に相当するアノテーションが存在します 、@PreLoad
および@PostLoad
。
@Entity(value="users", noClassNameStored = true)
public class User {
// Properties
private Date createdDate;
...
// Getters and setters
..
@PrePersist
public void prePersist() {
this.createdDate = (createdDate == null) ? new Date() : createdDate;
}
}