import-data.js 1.6 KB

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