我是构建 Wakanda 项目的新手,我已经成功构建了一个包含多个数据类的数据模型,我希望使用 SQL、JSON 或 CSV 转储文件生成的虚拟数据填充这些数据类。
我假设是否正确,我最好使用 JSON 格式的数据文件,然后将此虚拟数据上传到 dataModel。我一直无法在 Wakanda Studio 中找到任何地方使这成为可能。有人可以告诉/告诉我如何最好地填充 1000 多条虚拟数据记录。
提前致谢。
loadText
在解析CSV或JSON文件时importFromJSON
,我通常喜欢使用简单函数填充我的数据库。
.js
在项目的服务器端部分的任何位置创建一个文件。backend
和database
文件夹被认为是服务器端的。loadText('/path/to/file.csv').split("\n")
JSON文件。importFromJSON
输出显示在代码编辑器底部的控制台中。
有一种importFromJSON( )
方法可以补充该exportAsJSON( )
方法。
如果您的 JSON 不是来自 Wakanda 的exportAsJSON
方法,那么您可能需要创建一些记录,然后运行exportAsJSON
以验证 Wakanda 期望的格式。然后确保您的 JSON 格式相同,然后再与importFromJSON
.
这是我从 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();
});
我所做的是有一个.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()
语句在保存之前将许多预定字符串值之一添加到实体。这对我来说是一个很好的测试解决方案。