MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Morphia MongoDB sprawdza, czy nie ma pola zerowego i nieistniejącego

Z dokumentacji , Morphia nie przechowuje wartości Null/Empty (domyślnie), więc zapytanie

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

nie zadziała, ponieważ wygląda na to, że nie możesz wykonać zapytania o wartość null, ale możesz zapytać o konkretną wartość.

Ponieważ jednak możesz wysyłać zapytania tylko o konkretną wartość, możesz wymyślić obejście, w którym można zaktualizować createdDate pole z wartością daty, która nigdy nie jest używana w modelu. Na przykład, jeśli zainicjujesz obiekt Date z 0, zostanie on ustawiony na początek epoki, 1 stycznia 1970 00:00:00 UTC. Otrzymane godziny to zlokalizowane przesunięcie czasu. Wystarczy, jeśli twoja aktualizacja obejmuje tylko modyfikację pasujących elementów w powłoce mongo, więc wyglądałoby to podobnie do tego:

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

Następnie możesz użyć Fluent Interface aby zapytać o tę konkretną wartość:

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

Przy definiowaniu modelu znacznie prostsze byłoby dołączenie metody prePersist, która aktualizuje pole createdDate. Metoda jest oznaczona tagiem @PrePersist adnotację, aby data była ustawiona na zamówieniu przed jego zapisaniem. Istnieją równoważne adnotacje dla @PostPersist , @PreLoad i @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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $arrayElemAt . MongoDB

  2. Mongodb:Wykonaj zapytanie o zakres dat z ObjectId w powłoce mongo

  3. Błąd podczas wstawiania dokumentu do kolekcji podzielonej na fragmenty MongoDB utworzonej za pomocą CLI

  4. mongoose geojson w schemacie, błąd nie można wyodrębnić kluczy geograficznych

  5. Dlaczego łączenie się z MongoDB z Node.js jest wolne?