2014-12-15 7 views
10

io inserisco documento attraverso il seguente interrogazione:Inserimento Date() per MongoDB attraverso Mongo guscio

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

Ma lo farà mi dà errore. devo inserire la data nella mia collezione come posso ripararla?

+2

Che errore? [Modifica la tua domanda] (https://stackoverflow.com/posts/27480134/edit) e aggiungi il messaggio di errore. –

+0

Questa domanda indica chiaramente nella shell e tutte le risposte fornite sono per javascript. Si prega di inviare una risposta per l'inserimento dalla console mongo. –

risposta

11

È necessario ricevere un errore diverso in quanto il codice sopra comporterà il metodo Date() che restituisce la data corrente come stringa, indipendentemente dagli argomenti forniti con l'oggetto. Da documentation: Gli oggetti Data JavaScript possono essere istanziati solo chiamando JavaScript Date come costruttore: chiamandolo come una funzione regolare (cioè senza l'operatore new) restituirà una stringa anziché un oggetto Date; a differenza di altri tipi di oggetti JavaScript, gli oggetti Data JavaScript non hanno alcuna sintassi letterale.

Si potrebbe desiderare di provare questo invece di ottenere la data corretta, tenendo presente che il parametro mese di costruzione Date di JavaScript è 0-based:

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

Bella referenza. Ma non del tutto "veramente" su come funziona il costruttore 'Date' e i requisiti per MongoDB. –

+0

Grazie per la correzione, ho inizialmente pensato dalla [documentazione della shell di MongoDB] (http://docs.mongodb.org/manual/core/shell-types/) il metodo Date() restituisce la data corrente come una stringa come indicato sopra e come gli oggetti Date determinano un intervallo di date rappresentativo di circa 290 milioni di anni nel passato e nel futuro, ma non hanno mai capito bene come i parametri del costruttore 'Date' differiscono in MongoDB. Saluti per l'anima. – chridam

+0

JavaScript 'Date' fa la stessa cosa di' ISODate() 'per la shell si aspetta. 'ISODate()' è solo più rigido nella rappresentazione di ** only ** accetta una stringa che risulterebbe in un costrutto UTC. Questa era la distinzione. –

11

data JavaScript oggetti possono essere una cosa divertente. A seconda di come fornite effettivamente gli argomenti per istanziarli, otterrete risultati diversi.

Per esempio, alcuni potrebbero suggerire di provare questo:

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

Il che sembra bene, ma c'è un problema.

Si vede che alcune forme di istanziazione di un oggetto Date in JavaScript utilizzano il fuso orario "locale" durante la creazione della data. Altri usano il fuso orario UTC o "universale" secondo uno standard stabilito. Questo è anche lo "standard" che MongoDB si aspetta ed è generalmente accettato come best practice per l'applicazione per memorizzare le date in questo modo. Esegui eventuali conversioni nel codice, lontano dall'archivio dati. Ciò garantisce di poter gestire più locali senza problemi.

Allora, cosa si dovrebbe fare è questo:

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

C'è anche un "aiuto" nel guscio MongoDB che gestisce questo più o meno nello stesso modo, ma più specifico per la sintassi:

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

Questo produce un valore di data UTC che viene archiviato correttamente come previsto. Dovresti sempre occuparti di UTC quando memorizzi le date in MongoDB.

Problemi correlati