import-data.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const { CloudQuery, CloudObject } = require("../lib/ncloud");
  2. const { currentUserList, TravelPostList } = require("./data.js");
  3. importTravelPostAndcurrentUser()
  4. DataMap = {
  5. currentUser:{},
  6. TravelPost:{}
  7. }
  8. async function importTravelPostAndcurrentUser(){
  9. // 导入用户数据
  10. let currentUserList = currentUserList
  11. for (let index = 0; index < currentUserList.length; index++) {
  12. let currentUser = currentUserList[index];
  13. currentUser = await importObject("currentUser",currentUser)
  14. }
  15. console.log(DataMap["currentUser"])
  16. // 导入帖子数据
  17. let travelpostList = TravelPostList
  18. for (let index = 0; index < travelpostList.length; index++) {
  19. let travelpost = travelpostList[index];
  20. travelpost = await importObject("TravelPost",travelpost)
  21. }
  22. console.log(DataMap["TravelPost"])
  23. }
  24. async function importObject(className,data){
  25. // 查重 srcId 数据源列表中的objectId并非数据库生成的唯一ID,因此需要有一个srcId字段进行记录,并查重
  26. let query = new CloudQuery(className)
  27. let srcId = data.objectId
  28. query.equalTo("srcId",srcId)
  29. let importObj = await query.first()
  30. console.log(importObj)
  31. // 导入
  32. // 导入前批量处理Pointer类型数据,进行重定向
  33. Object.keys(data)?.forEach(key=>{
  34. let field = data[key]
  35. let srcId = field?.objectId
  36. if(srcId){ // 是数组字段
  37. if(key=="user"){
  38. data[key] = DataMap?.["currentUser"]?.[srcId]?.toPointer();
  39. }
  40. }
  41. })
  42. // 若未添加,则创建新对象并保存
  43. if(!importObj?.id){
  44. importObj = new CloudObject(className)
  45. }
  46. // 保存或更新数据
  47. data.srcId = srcId;
  48. importObj.set(data);
  49. importObj = await importObj.save();
  50. DataMap[className][srcId] = importObj
  51. }