2014-12-15 10 views
10

jestem włożeniem dokumentu poprzez następujące zapytanie:Wkładanie Date() w celu MongoDB przez Mongo shell

db.collection.insert( 
{ 
     date: Date('Dec 12, 2014 14:12:00') 
}) 

ale to daje mi błąd. muszę wstawić datę w mojej kolekcji, jak mogę to naprawić?

+2

Jaki błąd? [Edytuj swoje pytanie] (https://stackoverflow.com/posts/27480134/edit) i dodaj komunikat o błędzie. –

+0

To pytanie wyraźnie stwierdza w powłoce, a wszystkie podane odpowiedzi są dla javascript. Opublikuj odpowiedź do wstawienia z konsoli mongo. –

Odpowiedz

11

Musisz uzyskać inny błąd, ponieważ powyższy kod spowoduje, że metoda Date() zwróci bieżącą datę jako ciąg, niezależnie od argumentów dostarczonych z obiektem. Od documentation: Obiekty JavaScript mogą być tworzone tylko przez wywołanie JavaScript Date jako konstruktora: wywołanie go jako zwykłej funkcji (tj. Bez operatora new) spowoduje zwrócenie ciągu znaków zamiast obiektu Date; w przeciwieństwie do innych typów obiektów JavaScript obiekty JavaScript Date nie mają żadnej literalnej składni.

Możecie spróbować zamiast tego, aby uzyskać prawidłową datę, mając na uwadze, że parametr miesięcy nieaktualne konstruktora obsługa JavaScript jest oparty o 0:

var myDate = new Date(2014, 11, 12, 14, 12); 
db.collection.insert({ "date": myDate }); 
+0

Fajne odniesienie. Ale nie całkiem "prawdziwie" tam, jak działa konstruktor 'Date' i wymagania dla MongoDB. –

+0

Dzięki za poprawkę, początkowo sądziłem, że z dokumentacji powłoki MongoDB (http://docs.mongodb.org/manual/core/shell-types/) metoda Date() zwraca bieżącą datę jako ciąg znaków, jak podano powyżej i sposób, w jaki obiekty Date dają reprezentowalny zakres dat około 290 milionów lat w przeszłość i przyszłość, ale nigdy nie do końca wiadomo, w jaki sposób parametry konstruktora 'Date' różnią się w MongoDB. Pozdrawiam za oświecenie. – chridam

+0

JavaScript 'Date' działa tak samo, jak' ISODate() 'w oczekiwaniu na powłokę. 'ISODate()' jest po prostu bardziej rygorystyczne w reprezentacji ** tylko ** akceptuje łańcuch, który spowodowałby konstrukcję UTC. To było rozróżnienie. –

11

JavaScript data obiekty mogą być zabawne. W zależności od sposobu dostarczenia argumentów do ich utworzenia otrzymujesz różne wyniki.

Na przykład, niektórzy sugerują, spróbuj tego:

var myDate = new Date(2014, 11, 12, 14, 12) 

co wydaje się w porządku, ale nie jest to problem.

Widzisz, że niektóre formy tworzenia wystąpienia obiektu Date w JavaScript używają "lokalnej" strefy czasowej podczas tworzenia daty. Inni używają UTC lub "uniwersalnej" strefy czasowej do ustawionego standardu. Jest to również "standard", którego oczekuje MongoDB i jest ogólnie akceptowana jako najlepsza praktyka dla aplikacji do przechowywania dat w ten sposób. Wykonuj konwersje w kodzie, z dala od magazynu danych. Dzięki temu możesz radzić sobie z wieloma lokalizacjami bez problemu.

Więc co należy robić to w ten sposób:

var date = new Date("2014-12-11T14:12:00Z") 

Jest też „pomocnika” w powłoce MongoDB, który obsługuje ten prawie w ten sam sposób, ale bardziej charakterystyczne dla składni:

var date = new ISODate("2014-12-11T14:12:00Z") 

Powoduje utworzenie wartości daty UTC, która jest zapisywana poprawnie zgodnie z oczekiwaniami. Powinieneś zawsze postępować z UTC podczas przechowywania dat w MongoDB.

Powiązane problemy