Dalla documentazione , Morphia non memorizza valori Null/Empty (per impostazione predefinita), quindi la query
query.and(
query.criteria("createdDate").exists(),
query.criteria("createdDate").notEqual(null)
);
non funzionerà poiché sembra che tu non sia in grado di eseguire query su null, ma puoi eseguire query per un valore specifico.
Tuttavia, poiché puoi eseguire query solo per un valore specifico, puoi escogitare una soluzione alternativa in cui puoi aggiornare il createdDate
campo con un valore di data che non viene mai utilizzato nel modello. Ad esempio, se inizializzi un oggetto Date con 0, verrà impostato all'inizio dell'epoca, 1 gennaio 1970 00:00:00 UTC. Le ore che ottieni sono l'offset di tempo localizzato. Sarà sufficiente se il tuo aggiornamento prevede solo la modifica degli elementi corrispondenti in mongo shell, quindi sembrerebbe simile a questo:
db.users.update(
{"createdDate": null },
{ "$set": {"createdDate": new Date(0)} }
)
È quindi possibile utilizzare l'Interfaccia fluente per interrogare quel valore specifico:
Query<User> query = mongoDataStore
.find(User.class)
.field("createdDate").exists()
.field("createdDate").hasThisOne(new Date(0));
Sarebbe molto più semplice quando si definisce il modello per includere un metodo prePersist che aggiorna il campo CreateDate. Il metodo è contrassegnato da @PrePersist
annotazione in modo che la data sia impostata sull'ordine prima del suo salvataggio. Esistono annotazioni equivalenti per @PostPersist
, @PreLoad
e @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;
}
}