import-data.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. const { CloudQuery, CloudObject } = require("../lib/ncloud");
  2. const { UserInfoList, ItemInfoList, UserPreferList } = require("./data");
  3. // 测试CRUD
  4. //testQuery();
  5. async function testQuery() {
  6. let query = new CloudQuery("UserInfo");
  7. query.equalTo("name", "湖南渣渣辉2");
  8. let userInfoList = await query.find();
  9. console.log("userInfoList", userInfoList);
  10. }
  11. async function main() {
  12. // 基本的增删改查
  13. let query = new CloudQuery("UserInfo");
  14. let userInfoList = await query.find();
  15. console.log("userInfoList count", userInfoList?.length)
  16. let newUserInfo = new CloudObject("UserInfo");
  17. newUserInfo.set({ "name": "Squirral" });
  18. newUserInfo = await newUserInfo.save(newUserInfo);
  19. console.log("newUserInfo added", newUserInfo);
  20. newUserInfo.set({ "name": "Squirral2" });
  21. newUserInfo = await newUserInfo.save(newUserInfo);
  22. console.log("newUserInfo updated", newUserInfo);
  23. await newUserInfo.destory();
  24. console.log("newUserInfo deleted", newUserInfo);
  25. }
  26. //main()
  27. DataMap = {
  28. UserInfo: {},
  29. UserPrefer: {},
  30. ItemInfo: {}
  31. }
  32. importUserAndPrefer();
  33. async function importUserAndPrefer() {
  34. //导入用户数据
  35. let userInfoList = UserInfoList
  36. for (let index = 0; index < userInfoList.length; index++) {
  37. let userInfo = userInfoList[index];
  38. userInfo = await importObject("UserInfo", userInfo, "UserID");
  39. }
  40. //导入物品数据
  41. let itemInfoList = ItemInfoList
  42. for (let index = 0; index < itemInfoList.length; index++) {
  43. let itemInfo = itemInfoList[index];
  44. itemInfo = await importObject("ItemInfo", itemInfo,"ItemID");
  45. }
  46. //导入偏好数据
  47. let userPreferList = UserPreferList
  48. for (let index = 0; index < userPreferList.length; index++) {
  49. let userPrefer = userPreferList[index];
  50. userPrefer = await importObject("UserPrefer", userPrefer,"PreferID");
  51. }
  52. console.log(DataMap);
  53. }
  54. async function importObject(className, data, keyID) {
  55. // 查重:判断导入的数据的data.keyID字段值是否能在数据库对应的keyID字段中查到对应的记录
  56. // srcId为导入的表的主键字段值
  57. let query = new CloudQuery(className);
  58. let keyValue = data[keyID];
  59. let srcId = keyValue;
  60. query.equalTo(keyID,srcId)
  61. let importObj = await query.first()
  62. console.log(importObj)
  63. // 导入
  64. // 导入前批量处理Pointer类型数据,进行重定向
  65. Object.keys(data).forEach(key => {
  66. let field = data[key];
  67. if (field && typeof field === 'object' && field.__type === 'Pointer') {
  68. // 如果字段是Pointer类型,则进行重定向处理
  69. if (DataMap && DataMap[field.className] && DataMap[field.className][field.objectId]) {
  70. data[key] = DataMap[field.className][field.objectId].toPointer();
  71. }
  72. }
  73. });
  74. // 若未添加,则创建新对象并保存
  75. if(!importObj?.id){
  76. importObj = new CloudObject(className)
  77. }
  78. // 保存或更新data数据,让data中的keyID字段等于srcId的值
  79. data[keyID] = srcId;
  80. importObj.set(data);
  81. importObj = await importObj.save();
  82. DataMap[className][srcId] = importObj
  83. }