sql >> Database >  >> NoSQL >> MongoDB

Morphia MongoDB-controle op null en niet-bestaand veld

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;
    }
}


  1. MongoDB verschillende aggregatie

  2. Mongo-indexering op genest object

  3. update meerdere records met behulp van mongoosejs in node

  4. Hoofdletterongevoelig zoeken in Mongo