1

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

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

提前致谢。

4

4 回答 4

4

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

  1. 首先,您需要.js在项目的服务器端部分的任何位置创建一个文件。backenddatabase文件夹被认为是服务器端的。
  2. 您必须编写动作脚本。你可以在这里看到一个例子。如果您正在解析CSV文件,则使用其他loadText('/path/to/file.csv').split("\n")JSON文件importFromJSON
  3. 使用代码编辑器工具栏上的箭头按钮运行脚本。

输出显示在代码编辑器底部的控制台中。

于 2016-06-30T07:16:24.500 回答
3

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

如果您的 JSON 不是来自 Wakanda 的exportAsJSON方法,那么您可能需要创建一些记录,然后运行exportAsJSON以验证 Wakanda 期望的格式。然后确保您的 JSON 格式相同,然后再与importFromJSON.

于 2016-06-29T17:03:36.500 回答
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();
});
于 2016-07-08T09:23:16.850 回答
0

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

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

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

https://jsfiddle.net/kgwd1kek/

如果您愿意,我可以对此进行扩展,希望对您有所帮助。

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

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

于 2016-07-07T20:47:47.260 回答