import-data.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. const { CloudQuery, CloudObject } = require("../lib/ncloud");
  2. const { QuestionnaireResultList, QuestionnaireList, QuestionList, OptionList, UserInterestProfileList } = require("./data");
  3. importData();
  4. let DataMap = {
  5. QuestionnaireResult: {},
  6. Questionnaire: {},
  7. Question: {},
  8. Option: {},
  9. UserInterestProfile: {}
  10. }
  11. async function importData() {
  12. // 导入问卷结果数据
  13. let questionnaireResultList = QuestionnaireResultList;
  14. for (let index = 0; index < questionnaireResultList.length; index++) {
  15. let result = questionnaireResultList[index];
  16. result = await importObject("QuestionnaireResult", result);
  17. }
  18. // 导入问卷数据
  19. let questionnaireList = QuestionnaireList;
  20. for (let index = 0; index < questionnaireList.length; index++) {
  21. let questionnaire = questionnaireList[index];
  22. questionnaire = await importObject("Questionnaire", questionnaire);
  23. }
  24. // 导入问题数据
  25. let questionList = QuestionList;
  26. for (let index = 0; index < questionList.length; index++) {
  27. let question = questionList[index];
  28. question = await importObject("Question", question);
  29. }
  30. // 导入选项数据
  31. let optionList = OptionList;
  32. for (let index = 0; index < optionList.length; index++) {
  33. let option = optionList[index];
  34. option = await importObject("Option", option);
  35. }
  36. // 导入用户兴趣画像数据
  37. let userInterestProfileList = UserInterestProfileList;
  38. for (let index = 0; index < userInterestProfileList.length; index++) {
  39. let profile = userInterestProfileList[index];
  40. profile = await importObject("UserInterestProfile", profile);
  41. }
  42. // console.log(DataMap)
  43. }
  44. async function importObject(className, data) {
  45. // 查重 srcId 数据源列表中的 objectId 并非数据库生成的唯一 ID,因此需要有一个 srcId 字段进行记录,并查重
  46. let query = new CloudQuery(className);
  47. let srcId = data.objectId;
  48. query.equalTo("srcId", srcId);
  49. let importObj = await query.first();
  50. console.log(importObj);
  51. // 导入前批量处理 Pointer 类型数据,进行重定向
  52. Object.keys(data)?.forEach(key => {
  53. let field = data[key];
  54. let srcId = field?.objectId;
  55. if (srcId) { // 是 Pointer 类型
  56. if (key === "userId" || key === "questionnaireId" || key === "questionId") {
  57. data[key] = DataMap?.[key.replace("Id", "")]?.[srcId]?.toPointer();
  58. } else if (Array.isArray(field)) {
  59. data[key] = field.map(item => {
  60. return DataMap?.[item.className]?.[item.objectId]?.toPointer();
  61. });
  62. }
  63. }
  64. });
  65. // 若未添加,则创建新对象并保存
  66. if (!importObj?.id) {
  67. importObj = new CloudObject(className);
  68. }
  69. // 保存或更新数据
  70. data.srcId = srcId;
  71. importObj.set(data);
  72. importObj = await importObj.save();
  73. DataMap[className][srcId] = importObj;
  74. }
  75. /// 展示当前问卷内的问题及其选项
  76. async function displayQuestionnaireDetails(questionnaireId) {
  77. // 查询问卷
  78. let questionnaireQuery = new CloudQuery("Questionnaire");
  79. questionnaireQuery.equalTo("objectId", questionnaireId);
  80. let questionnaire = await questionnaireQuery.first();
  81. // 检查问卷是否存在
  82. if (!questionnaire) {
  83. console.log("问卷未找到,无法展示问题和选项。");
  84. return;
  85. }
  86. console.log(`问卷标题: ${questionnaire.title}`);
  87. console.log(`问卷状态: ${questionnaire.status}`);
  88. console.log("问题列表:");
  89. // 查询问题
  90. let questionQuery = new CloudQuery("Question");
  91. questionQuery.equalTo("questionnaireId", {
  92. "__type": "Pointer",
  93. "className": "Questionnaire",
  94. "objectId": questionnaireId
  95. });
  96. let questions = await questionQuery.find();
  97. // 检查是否有问题
  98. if (questions.length === 0) {
  99. console.log("当前问卷没有问题。");
  100. return;
  101. }
  102. // 遍历问题并查询选项
  103. for (let question of questions) {
  104. // 检查问题是否存在
  105. if (!question) {
  106. console.log("问题未找到,无法展示选项。");
  107. continue; // 跳过当前循环,继续下一个问题
  108. }
  109. console.log(` 问题: ${question.questionText}`);
  110. // 查询选项
  111. let optionQuery = new CloudQuery("Option");
  112. optionQuery.equalTo("questionId", {
  113. "__type": "Pointer",
  114. "className": "Question",
  115. "objectId": question.objectId
  116. });
  117. let options = await optionQuery.find();
  118. // 输出选项
  119. console.log(" 选项:");
  120. if (options.length === 0) {
  121. console.log(" - 此问题没有选项。");
  122. } else {
  123. for (let option of options) {
  124. console.log(` - ${option.optionText} (已选: ${option.isSelected})`);
  125. }
  126. }
  127. console.log(""); // 添加空行以便于阅读
  128. }
  129. }
  130. // 示例调用
  131. displayQuestionnaireDetails("jbg6EYXk3G");