MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como importar dados do arquivo CSV para a coleção Meteor no lado do servidor


Você estava muito perto. Só precisei fazer algumas alterações para que funcionasse.

Não sei como é o seu arquivo .csv, então criei um assim:
A1, B1, C1, D1, E1, F1, G1, H1, I1
A2, B2, C2, D2, E2, F2, G2, H2, I2

Sua operação file.split não estava dividindo as linhas, mas estava colocando tudo em uma grande linha. Fiz assim e funcionou:
var lines = file.split(/\r\n|\n/);

Isso tem linhas individuais para dividir em membros da matriz. Então eu assumi que, como você está chamando sua entrada de CSV, seus valores são separados por vírgulas, não por pipes. Então eu mudei seu line.split para isso
var line_parts = line.split(',');

Outras alterações que fiz podem não ser o que estava causando a falha do seu, mas é assim que acho que as coisas são feitas normalmente ...

Em vez de declarar sua coleção assim
Meteor.orders = new Meteor.Collection('Orders');

eu fiz assim
Orders = new Mongo.Collection("orders");

Observe que isso é executado pelo servidor e pelo cliente.

Em vez de sua maneira de declarar métodos no servidor, apenas coloquei isso no código do servidor (não no Meteor.start):
Meteor.methods({
    upload : function(fileContent) {
        console.log("start insert");
        import_file_orders(fileContent);
        console.log("completed");
    }
});

E, claro, alterei a linha de inserção na parte inferior da sua função 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));

EDITAR para código atualizado na pergunta:

Mova a função import_file_orders do bloco cliente para o bloco servidor.