Uit de documentatie , Morphia slaat geen Null/Leeg-waarden op (standaard), dus de vraag
query.and(
query.criteria("createdDate").exists(),
query.criteria("createdDate").notEqual(null)
);
zal niet werken omdat het lijkt alsof je niet in staat bent om op null te zoeken, maar wel naar een specifieke waarde.
Omdat u echter alleen naar een specifieke waarde kunt zoeken, kunt u een tijdelijke oplossing bedenken waarbij u de createdDate
kunt bijwerken. veld met een datumwaarde die nooit in uw model wordt gebruikt. Als u bijvoorbeeld een Date-object met 0 initialiseert, wordt het ingesteld op het begin van het tijdperk, 1 januari 1970 00:00:00 UTC. De uren die u krijgt, zijn de plaatselijke tijdverschuiving. Het is voldoende als uw update alleen het wijzigen van de overeenkomende elementen in de mongo-shell inhoudt, daarom zou het er ongeveer zo uitzien:
db.users.update(
{"createdDate": null },
{ "$set": {"createdDate": new Date(0)} }
)
U kunt dan de Fluent Interface gebruiken om op die specifieke waarde te zoeken:
Query<User> query = mongoDataStore
.find(User.class)
.field("createdDate").exists()
.field("createdDate").hasThisOne(new Date(0));
Het zou veel eenvoudiger zijn om bij het definiëren van uw model een prePersist-methode op te nemen die het veld createdDate bijwerkt. De methode is getagd met de @PrePersist
annotatie zodat de datum op de bestelling wordt gezet voordat deze wordt opgeslagen. Er bestaan gelijkwaardige annotaties voor @PostPersist
, @PreLoad
en @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;
}
}