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

Unikalne ograniczenia MongoDb w zakresie dat

Nie ma śmiertelnie prostego sposobu na zrobienie tego w MongoDB. Wymyśliłem jedną alternatywną opcję, która może dla ciebie zadziałać. Jeśli daty są dyskretne, na przykład w przypadku aplikacji do rezerwacji, w której użytkownicy rezerwują obiekty według dnia lub godziny, możesz użyć kombinacji unikalnych indeksów i indeksów wielokluczowych. Załóżmy na przykład, że rezerwacje są na dzień. John Q rezerwuje od 11 do 14 października włącznie. To jest coś w stylu 281 do 284 dni w roku – załóżmy, że to dokładnie te dni. Zapisz pole rezerwacji jako tablicę zarezerwowanych dni

> db.reservations.insert({ "span" : [ 281, 282, 283, 284 ] })

Umieść unikalny indeks na span pole.

> db.reservations.ensureIndex({ "span" : 1}, { "unique" : 1 })

Teraz nie możesz wstawić dokumentu, który obejmuje którykolwiek z tych dni:

> db.reservations.insert({ "span" : [ 279, 280, 281, 282 ] })
// unique key error

Może to zadziałać z dodatkowymi poprawkami, aby uwzględnić rok, lub może być częścią złożonego unikalnego indeksu, aby przedziały czasowe były unikalne, np. room_id do rezerwacji hotelu.

Innym sposobem jest po prostu koordynacja kontroli po stronie klienta. Jeśli masz wielu klientów, którzy w ogóle się ze sobą nie komunikują, myślę, że najlepszym sposobem, aby to zrobić, byłoby udostępnienie „blokady” w bazie danych:findAndModify dokument w lock kolekcja, aby sprawdzić i zdobyć zamek. Gdy klient ma blokadę, zmieniając pole w tym dokumencie, może sprawdzić, czy pokrywa się z zapytaniem, a następnie wstawić, jeśli wszystko jest w porządku, a następnie zwolnić blokadę, zmieniając ponownie flagę w dokumencie blokady.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak uzyskać identyfikator obiektu po zapisaniu obiektu w Mongoose?

  2. Unikalny indeks ignorowany podczas aktualizacji za pomocą Mongoose + Mockgoose w NodeJS

  3. jak znaleźć określony ciąg w parze klucz-wartość w mongodb

  4. Jak zwrócić ostatni osadzony dokument push()?

  5. Cursor.nextObject Mongo Czasami błędnie zwraca wartość Null?