sql >> Database teknologi >  >> NoSQL >> MongoDB

Morphia MongoDB check for null og ikke eksisterende felt

Fra dokumentationen , Morphia gemmer ikke Null/Empty-værdier (som standard), så forespørgslen

query.and(
    query.criteria("createdDate").exists(),
    query.criteria("createdDate").notEqual(null)
);

vil ikke fungere, da det ser ud til, at du ikke er i stand til at forespørge på null, men kan forespørge efter en bestemt værdi.

Men da du kun kan forespørge efter en bestemt værdi, kan du finde en løsning, hvor du kan opdatere createdDate felt med en datoværdi, der aldrig bruges i din model. For eksempel, hvis du initialiserer et Dato-objekt med 0, vil det blive sat til begyndelsen af ​​epoken, 1. januar 1970 00:00:00 UTC. De timer, du får, er den lokaliserede tidsforskydning. Det vil være tilstrækkeligt, hvis din opdatering kun involverer ændring af de(n) matchende element(er) i mongo shell, derfor vil den se lignende ud:

db.users.update(
    {"createdDate": null }, 
    { "$set": {"createdDate": new Date(0)} }
)

Du kan derefter bruge Flydende grænseflade for at forespørge på den specifikke værdi:

Query<User> query = mongoDataStore
    .find(User.class)    
    .field("createdDate").exists()
    .field("createdDate").hasThisOne(new Date(0));

Det ville være meget enklere, når du definerer din model, at inkludere en prePersist-metode, der opdaterer feltet createdDate. Metoden er mærket med @PrePersist anmærkning, så datoen er sat på ordren, inden den gemmes. Der findes tilsvarende annoteringer for @PostPersist , @PreLoad og @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;
    }
}


  1. MongoDB Index Builds – Forhindrer brugere i at udløse nye Builds

  2. Laravel + predis + Redis klynge - FLYTTET / ingen forbindelse til 127.0.0.1:6379

  3. redis scanning returnerer tomme resultater, men ikke-nul markør

  4. Fremhæv underfelter til topniveau i projektion uden at angive alle nøgler