MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come importare i dati dal file CSV nella raccolta di Meteor lato server

Eri molto vicino. Ho dovuto solo apportare alcune modifiche per farlo funzionare.

Non so che aspetto abbia il tuo file .csv, quindi ne ho creato uno così:

A1, B1, C1, D1, E1, F1, G1, H1, I1
A2, B2, C2, D2, E2, F2, G2, H2, I2

La tua operazione file.split non stava dividendo le righe, ma stava mettendo tutto su una grande riga. L'ho fatto in questo modo e ha funzionato:

var lines = file.split(/\r\n|\n/);

Ciò ha fatto dividere le singole righe in membri dell'array. Quindi ho pensato che, dal momento che stai chiamando il tuo input un CSV, i tuoi valori sono separati da virgole, non da pipe. Quindi ho cambiato il tuo line.split in questo

var line_parts = line.split(',');

Altre modifiche che ho apportato potrebbero non essere ciò che ha causato il fallimento del tuo, ma è così che penso che le cose vengano normalmente fatte...

Invece di dichiarare la tua collezione in questo modo

Meteor.orders = new Meteor.Collection('Orders');

L'ho fatto così

Orders = new Mongo.Collection("orders");

Nota che questo è eseguito sia dal server che dal client.

Invece del tuo modo di dichiarare i metodi sul server, l'ho semplicemente inserito nel codice del server (non in Meteor.start):

Meteor.methods({
    upload : function(fileContent) {
        console.log("start insert");
        import_file_orders(fileContent);
        console.log("completed");
    }
});

E, naturalmente, ho cambiato la riga di inserimento nella parte inferiore della tua funzione import_file_orders

var result = Orders.insert({Patient:pat_id, Exam_code:ex_key, Exam_name:ex_name, Clinical_info:clin_info, Order_info:order_info, Clinician_first:clinician_first_name, Clinician_last:clinician_last_name, Clinician_c_code:clinician_code, Clinician_riziv:clinician_riziv, Planned:null});
console.log(Orders.findOne(result));

MODIFICA per il codice aggiornato nella domanda:

Sposta la funzione import_file_orders dal blocco client al blocco server.