Dari dokumentasi , Morphia tidak menyimpan nilai Null/Empty (secara default) sehingga kueri
query.and(
query.criteria("createdDate").exists(),
query.criteria("createdDate").notEqual(null)
);
tidak akan berfungsi karena tampaknya Anda tidak dapat melakukan kueri pada null, tetapi dapat melakukan kueri untuk nilai tertentu.
Namun, karena Anda hanya dapat melakukan kueri untuk nilai tertentu, Anda dapat menemukan solusi di mana Anda dapat memperbarui createdDate
bidang dengan nilai tanggal yang tidak pernah digunakan dalam model Anda. Misalnya, jika Anda menginisialisasi objek Date dengan 0, itu akan disetel ke awal epoch, 1 Januari 1970 00:00:00 UTC. Jam yang Anda dapatkan adalah offset waktu lokal. Sudah cukup jika pembaruan Anda hanya melibatkan modifikasi elemen yang cocok di mongo shell, maka akan terlihat mirip dengan ini:
db.users.update(
{"createdDate": null },
{ "$set": {"createdDate": new Date(0)} }
)
Anda kemudian dapat menggunakan Antarmuka Lancar untuk menanyakan nilai spesifik itu:
Query<User> query = mongoDataStore
.find(User.class)
.field("createdDate").exists()
.field("createdDate").hasThisOne(new Date(0));
Akan jauh lebih sederhana ketika mendefinisikan model Anda untuk menyertakan metode prePersist yang memperbarui bidang CreatedDate. Metode ini ditandai dengan @PrePersist
anotasi sehingga tanggal diatur pada urutan sebelum disimpan. Anotasi yang setara tersedia untuk @PostPersist
, @PreLoad
dan @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;
}
}