Je suis en train d'écrire un utilitaire au travail qui convertit notre base de données relationnelle au travail en un objet JSON complexe et des dumps vers des fichiers groupés par sujet. Je voudrais ensuite importer ces fichiers dans les collections MongoDB en utilisant l'outil mongoimport
.Dates MongoImport se produisant avant l'époque
Nos données incluent les horodatages qui représentent les dates antérieures à l'époque, dont la représentation JSON appropriée donne des nombres négatifs. Alors que MongoDB lui-même va gérer ces problèmes, l'analyseur JSON des outils d'importation utilise les variables unsigned long long
et échoue.
Si vous utilisez le format de représentation de date JSON spécial de Mongo ({"key": { "$date": "value_in_ticks" } }
), l'outil d'importation émet une erreur sur ces documents et ignore l'importation. Vous pouvez également utiliser la notation de date JavaScript ({"key": new Date(value_in_ticks) }
) qui sera importée mais analysée comme une valeur non signée créant une date de vidage.
Le format de date spécial échoue en raison d'un assertion checking for reserved words. Ce code est atteint parce que la présence du signe négatif au début de la valeur provoque l'extraction de l'analyse de date spéciale et le retour à l'analyse normale des documents.
Le code to parse JSON dates appelle explicitement la bibliothèque d'amélioration uint_parser
. Il existe une version signée de cette fonction et un issue on their JIRA tracker existe déjà pour l'utiliser (sur lequel j'ai commenté que je tenterais).
À moins de plonger immédiatement dans le code pour essayer de mettre à jour ce code à signer, y a-t-il un autre itinéraire que je peux prendre pour charger ces dates pour le moment?
Je veux courir ce soir via cron pendant quelques mois pour tester, donc je préférerais que ce soit très facile. Ces dates existent dans de nombreuses parties différentes de documents dans de nombreuses collections différentes, de sorte que la solution devrait être généralisée.
Bien que je n'ai pas de réponse, +1 pour une question bien écrite. – UnkwnTech