sql >> Databasteknik >  >> NoSQL >> MongoDB

Morphia MongoDB kontrollera för null och icke existerande fält

Från dokumentationen , Morphia lagrar inte Null/Empty-värden (som standard) så frågan

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

kommer inte att fungera eftersom det verkar som att du inte kan fråga på null, men kan fråga efter ett specifikt värde.

Men eftersom du bara kan fråga efter ett specifikt värde kan du komma på en lösning där du kan uppdatera createdDate fält med ett datumvärde som aldrig används i din modell. Till exempel, om du initierar ett Date-objekt med 0, kommer det att ställas in på början av epoken, 1 januari 1970 00:00:00 UTC. Timmarna du får är den lokaliserade tidsförskjutningen. Det kommer att räcka om din uppdatering endast innebär att modifiera de matchande elementen i mongo-skalet, så det skulle se ut på samma sätt som detta:

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

Du kan sedan använda Flytande gränssnitt för att fråga om det specifika värdet:

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

Det skulle vara mycket enklare när du definierar din modell att inkludera en prePersist-metod som uppdaterar fältet createDate. Metoden är taggad med @PrePersist anteckning så att datumet ställs in på beställningen innan det sparas. Motsvarande kommentarer finns för @PostPersist , @PreLoad och @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 - Uppröstning/nedröstning av kommentarer med aggregationspipeline

  2. Ändra MongoDB datalagringskatalog

  3. Mongoose uppdatering/upsert?

  4. Hur man väljer endast matchade underdokument av mongodb med python