web-dev-qa-db-fra.com

Insertion de Date () dans Mongodb via mongo shell

J'insère un document via la requête suivante:

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

Mais cela me donnera une erreur.

Comment puis-je insérer une date dans ma collection sans obtenir d'erreur?

12
Logicbomb

Vous devez obtenir une erreur différente car le code ci-dessus entraînera la méthode Date() renvoyant la date actuelle sous forme de chaîne, quels que soient les arguments fournis avec l'objet. Depuis la documentation : Les objets JavaScript Date ne peuvent être instanciés qu'en appelant JavaScript Date en tant que constructeur: en l'appelant comme une fonction régulière (c'est-à-dire sans le new opérateur) renverra une chaîne plutôt qu'un objet Date; contrairement aux autres types d'objets JavaScript, les objets Date JavaScript n'ont pas de syntaxe littérale.

Vous pouvez essayer ceci à la place pour obtenir la date correcte, en gardant à l'esprit que le paramètre month du constructeur Date de JavaScript est basé sur 0:

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

Les objets de date JavaScript peuvent être amusants. Selon la façon dont vous fournissez réellement les arguments pour les instancier, vous obtenez des résultats différents.

Par exemple, certains pourraient vous suggérer d'essayer ceci:

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

Ce qui semble bien, mais il y a un problème.

Vous voyez que certaines formes d'instanciation d'un objet Date en JavaScript utilisent le fuseau horaire "local" lors de la création de la date. D'autres utilisent le fuseau horaire UTC ou "universel" selon une norme définie. C'est également le "standard" que MongoDB attend, et est généralement accepté comme meilleure pratique pour que votre application stocke les dates de cette manière. Faites des conversions dans votre code, loin du magasin de données. Cela garantit que vous pouvez gérer plusieurs paramètres régionaux sans problème.

Donc, ce que vous devriez faire, c'est ceci:

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

Il existe également un "assistant" dans le shell MongoDB qui gère cela à peu près de la même manière, mais plus spécifique à la syntaxe:

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

Cela produit une valeur de date UTC qui stocke correctement comme prévu. Vous devez toujours traiter avec UTC lors du stockage de dates dans MongoDB.

11
Neil Lunn