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

Sterownik Mongodb c# i ISODate

W większości przypadków chcesz przechowywać daty UTC w bazie danych, więc Twój DateTime powinien być skonstruowany jako:-

DateTest = new DateTime(2013, 10, 13, 0, 0, 0, DateTimeKind.Utc) //this is the date

Dzięki temu pierwszy z twoich skomentowanych testów jednostkowych teraz przeszedł.

Bez określania DateTimeKind pozostawiasz to przypadkowi. MongoDB wydaje się zakładać, że jest ona lokalna i konwertuje ją na UTC w bazie danych.

Należy również zauważyć, że wartości MongoDB DateTime mają mniejszą dokładność niż wartości DateTime platformy .NET. Jeśli chcesz przechowywać dowolne wartości DateTime i odzyskać je w taki sposób, aby nadal były zgodne, musisz zaokrąglić je do najbliższej milisekundy przed ich zapisaniem.

Jeśli naprawdę chcesz przechowywać lokalne czasy, polecam przełączyć się z DateTime do DateTimeOffset i zserializuj go jako długą wartość Tick dla daty i godziny UTC oraz wartość dla przesunięcia.

Zwróć uwagę, że jeśli nie przechowujesz przesunięcia obliczonego w momencie uzyskania wartości DateTime, metody .NET do konwersji na czas lokalny są zasadniczo bezużyteczne, ponieważ nie wiedzą, kiedy rozpoczął się czas letni, ani nawet nie wiedzą, w jakiej strefie pojawia się wartość DateTime z. Ogólnie rzecz biorąc, obsługa .NET DateTime pozostawia wiele do życzenia i zawiera wiele wprowadzających w błąd metod, które twierdzą, że pomagają, ale tak naprawdę nie są.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wyświetlić lub zmodyfikować opcje sortowania ustawione w kolekcji MongoDB?

  2. Indeksy złożone MongoDB — czy kolejność sortowania ma znaczenie?

  3. Zaokrąglanie do 2 miejsc po przecinku przy użyciu platformy agregacji MongoDB

  4. Zrozumienie opcji limitu czasu klienta MongoDB

  5. Czy możliwe jest wpisywanie danych rzutowania w potoku agregacji w MongoDB?