Estoy tratando de crear una secuencia de comandos de nodo, que toma un archivo xlsx y extrae los datos de él usando convert-excel-to-json y luego crea una secuencia de comandos de migración-mongo , que insertará los datos en la colección de mongo.
Pude hacer el script del nodo, pero hay un campo de fecha en mi colección. en la hoja xlsx los datos están en formato dd/mm/yyyy. extraje las fechas y en el script de nodo traté de mapearlo como
"startDate": new Date("yyyy-mm-ddTHH:MM:ssZ");y luego lo insertó en el archivo para crear el conjunto de datos del script mongo usando
fs.writeFileSync("dataToInsert.js", JSON.stringify(newData, null, 2), 'utf-8');pero el archivo de migración que se creó tenía la fecha como resultado de la ejecución. es decir
"startDate": "yyyy-mm-ddTHH:MM:ssZ"qué se debe hacer para obtener los datos en el script mongo-migrate como nueva fecha ("yyyy-mm-ddTHH: MM: ssZ"); para que esto se ejecute al insertar datos en mongoDb y cree un campo de fecha adecuado y no un campo de cadena.
EDITAR: como se menciona en los comentarios, lo intenté
"startDate" : {"$date": "yyyy-mm-ddTHH:MM:ssZ"}pero esto funciona en la versión de nodo más reciente (probado en el nodo 14). pero estos datos de fecha no se insertan ni se leen cuando se usa el nodo v10.16.3.
Creo que la única forma de lograr lo que está tratando de hacer es mediante el uso de mongo-extended-json https://docs.mongodb.com/manual/reference/mongodb-extended-json/ que usa el formato
"startDate" : {"$date": "yyyy-mm-ddTHH:MM:ssZ"} Parece que el problema radica en el análisis de los datos mediante JSON.stringify . Sugeriría usar EJSON del paquete BSON para analizar los datos.
en vez de
fs.writeFileSync("dataToInsert.js", JSON.stringify(newData, null, 2), 'utf-8');probar
const { EJSON } = require('bson'); fs.writeFileSync("dataToInsert.js", EJSON.parse(newData)); //utf-8 is default option here