Parse Server导入excel数据

文章允许转载,请注明来源:https://blog.csdn.net/feiniao8651/article/details/83015540

facebook的parse和google的firebase类似,都属于serverless的开发工具。facebook已经关闭了parse商业服务,并将server部分的代码开源。我们可以在自己服务器上搭建paese server服务。parse server数据存储在mongodb中,通过parse dashboard可以看到相应的数据内容。

问题

1尝试dashborad的导入

因为有一些数据是之前存储在excel中的,要把这些数据存到数据库中,由于量比较大,一个个输入不现实。首先查看了parse dashboard的页面,发现并没有提供数据导入的功能,而且从github上issue中开发者的回复来看,短期内他们也不会在dashboard中增加数据导入的功能。

2尝试用数据库导入的方式。

数据库的数据导入导出是大家在开发中常用到的功能,基本上所有成熟的数据库都提供了数据导入导出的支持。mongodb也可以导入数据,mongoimport是mongodb的导入数据命令,支持json和csv格式的数据。excel倒是可以很容易的转存为csv格式,执行完导入命令,发现在dashboard中显示的导入数据ObjectId都是类似于"5bbf0e0e27c0329f92653cd9"的格式(注:需要修改mongodb的_SCHEMA表之后才能在dashboard中看到导入的数据,这个表相当于是记录了parse server处理的数据)。看到这个格式的变化,也没在意,以为这是属于正常。但是发现在parse中并不能访问这些导入的数据,也就是说parse不支持这种通过数据库直接导入的数据。

解决方法

参考github讨论中给的一个方式实现了数据导入。方法原理很简单,就是直接把json数据发送到server端,然后在server端做一个数据的存储操作。不过对于海量的数据,可能会超出http协议数据长度的限制,不建议用这种方法。下面就直接贴代码实现了。

步骤1 parse server端实现import接口

Parse.Cloud.define("import", function (request, response) {
  var className = request.params.className;
  var rows = request.params.rows;
  
  var MyClass = Parse.Object.extend(className);

  var promises = [];
  for (var i = 0; i < rows.length; i++) {
    var myClassObject = new MyClass();

    for (var column in rows[i]) {
      myClassObject.set(column, rows[i][column]);
    }

    promises.push(myClassObject.save());
  }

  Parse.Promise
    .when(promises)
    .then(
      function () {
        response.success('Successfully imported ' + i + ' rows into ' + className + ' class');
      },
      function (error) {
        response.error('Import failed: ' + error);
      });
});

步骤2 本地使用csvtojson转换数据后发送到server端import接口

const csvFilePath='data.csv'
const dataClassName='MyTask'
const csv=require('csvtojson')
var Parse=require('parse/node')

var appId='myapp'

Parse.initialize(appId)
Parse.serverURL='http://127.0.0.1:1337/parse/'

csv()
.fromFile(csvFilePath)
.then((jsonObj)=>{
      let data = {className: dataClassName, rows: jsonObj}
      console.log(jsonObj)
      Parse.Cloud.run('import', data).then(function(response) {
              console.log(response);
      });
})

之后调用本地的js程序就能将csv文件中的数据存储到parse server的数据库里了,可以看到ObjectId也是正常的格式。

参考:
Data import
Example of importing data with cloud functions
csvtojson

猜你喜欢

转载自blog.csdn.net/feiniao8651/article/details/83015540