文章允许转载,请注明来源:https://blog.csdn.net/feiniao8651/article/details/83015540
facebook的parse和google的firebase类似,都属于serverless的开发工具。facebook已经关闭了parse商业服务,并将server部分的代码开源。我们可以在自己服务器上搭建paese server服务。parse server数据存储在mongodb中,通过parse dashboard可以看到相应的数据内容。
因为有一些数据是之前存储在excel中的,要把这些数据存到数据库中,由于量比较大,一个个输入不现实。首先查看了parse dashboard的页面,发现并没有提供数据导入的功能,而且从github上issue中开发者的回复来看,短期内他们也不会在dashboard中增加数据导入的功能。
数据库的数据导入导出是大家在开发中常用到的功能,基本上所有成熟的数据库都提供了数据导入导出的支持。mongodb也可以导入数据,mongoimport是mongodb的导入数据命令,支持json和csv格式的数据。excel倒是可以很容易的转存为csv格式,执行完导入命令,发现在dashboard中显示的导入数据ObjectId都是类似于"5bbf0e0e27c0329f92653cd9"的格式(注:需要修改mongodb的_SCHEMA表之后才能在dashboard中看到导入的数据,这个表相当于是记录了parse server处理的数据)。看到这个格式的变化,也没在意,以为这是属于正常。但是发现在parse中并不能访问这些导入的数据,也就是说parse不支持这种通过数据库直接导入的数据。
参考github讨论中给的一个方式实现了数据导入。方法原理很简单,就是直接把json数据发送到server端,然后在server端做一个数据的存储操作。不过对于海量的数据,可能会超出http协议数据长度的限制,不建议用这种方法。下面就直接贴代码实现了。
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);
});
});
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