如何将虚拟数据上传到Wakanda DataSource

时间:2016-06-29 16:27:03

标签: json upload wakanda

我是构建Wakanda项目的新手,我已成功构建了一个包含多个dataClasses的dataModel,我希望使用SQL,JSON或CSV转储文件使用虚拟生成的数据填充这些dataClasses。

我认为这是正确的,我最好使用JSON格式的数据文件,然后将这些虚拟数据上传到dataModel。我无法在Wakanda Studio找到任何可能的地方。有人能告诉/告诉我如何最好地填充假数据的1000多条记录。

提前致谢。

4 个答案:

答案 0 :(得分:4)

我通常喜欢在解析 CSV 时使用简单的loadText函数填充数据库,或者使用 JSON 文件解析importFromJSON

  1. 首先,您需要在项目的服务器端部分的任何位置创建.js文件。 backenddatabase个文件夹被视为服务器端。
  2. 您必须编写动作脚本。你可以看到example here。如果您正在解析 CSV 文件,请使用loadText('/path/to/file.csv').split("\n"),否则请使用importFromJSON获取 JSON 文件。
  3. 使用代码编辑器工具栏上的箭头按钮运行脚本。
  4. 输出显示在代码编辑器底部的控制台中。

答案 1 :(得分:3)

有一种importFromJSON( )方法可以补充exportAsJSON( )方法。

如果您的JSON来自Wakanda的exportAsJSON方法之外的其他内容,那么您可能需要创建一些记录,然后运行exportAsJSON来验证Wakanda期望的格式。然后在使用importFromJSON之前确保您的JSON格式相同。

答案 2 :(得分:1)

这是我从JSON对象导入的方法。

您必须知道根据关系以正确的顺序导入数据。例如,您不能先导入员工并分配公司,因为公司尚不存在。所以这里的正确顺序是导入公司,然后导入员工并链接相关的公司。

/**
 * Example Data
 */

var hireDate = new Date('2012',7,13,1,0,0),
    companies = [{name:'Company 1'},{name:'Company 2'},{name:'Company 3'}],

    employees = [{firstName:'John',lastName:'Doe',company:'Company 1',hireDate:hireDate,salary:2000},
                    {firstName:'Frederic',lastName:'Smith',company:'Company 2',hireDate:hireDate,salary:2000},
                    {firstName:'John',lastName:'Doe',company:'Company 3',hireDate:hireDate,salary:3000},
                    {firstName:'Marc',lastName:'Petit',company:'Company 2',hireDate:hireDate,salary:5000},
                    {firstName:'Arthur',lastName:'Johns',company:'Company 3',hireDate:hireDate,salary:2500},
                    {firstName:'Mike',lastName:'Sina',company:'Company 3',hireDate:hireDate,salary:2900},
                    {firstName:'Jack',lastName:'Taylor',company:'Company 1',hireDate:hireDate,salary:7800},
                    {firstName:'Simon',lastName:'Portmann',company:'Company 2',hireDate:hireDate,salary:4700}],

    newCompany,newEmployee;

companies.forEach(function(company){
    newCompany = new ds.Company(company);
    newCompany.save();
});

employees.forEach(function(employee){
    newEmployee = new ds.Employee(employee);
    newEmployee.company = ds.Company.find('name == :1',employee.company)
    newEmployee.save();
});

ds.Employee.all()

如果属性名称与dataClass中的属性名称相同,则只需在创建时分配对象即可。或者,如果你有一些特殊规则,你可以操纵属性:

employees.forEach(function(employee){
    newEmployee = new ds.Employee();
    // Example how to assign value to an attribute on the import
    // newEmployee is the new employee created in the dataStore of Wakanda.
    // employee is the employee which come from the JSON object.
    // Maybe the imported data have different attribute names.
    newEmployee.firstName = employee.name;
    newEmployee.lastName = employee.lname;
    newEmployee.birthDate = new Date(employee.datestamp);
    newEmployee.company = ds.Company.find('name == :1',employee.company)
    newEmployee.save();
});

答案 3 :(得分:0)

我所做的是拥有我在项目级别创建的.js文件。在该文件中是下面的jsfiddle中的代码。您将看到,当您的解决方案运行时,您可以点击编辑器窗口上方的“播放”按钮来运行脚本。

请注意,您对数据存储类的访问仍会受到您在数据存储类上设置的任何validate()restrict()save()等事件的影响,以限制访问/保护您的数据。如果这些限制妨碍您,请查看promoteWith()unPromote()

我的脚本从项目级别的Backups文件夹加载逗号分隔的CSV。我把javascript放在这里给你看:

https://jsfiddle.net/kgwd1kek/

如果你愿意,我可以扩展这个,我希望这会有所帮助。

此外,如果您指的是解决方案中第一个/唯一一个项目以外的项目,您将需要更改第2行的数组索引。

另外,您可以在for文件中放置.js循环,该文件从1-1000创建记录并保存。我这样做,甚至使用Math.random() function I picked up from MDN来创建包含随机数据的记录。即使在字符串数据或布尔值的情况下,我使用随机数和switch()语句在保存之前将许多预定字符串值中的一个添加到实体。对我来说这是一个很好的测试解决方案。