前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Fluid -26- 迁移 Waline LeanCloud 数据到本地

Fluid -26- 迁移 Waline LeanCloud 数据到本地

作者头像
为为为什么
发布2022-09-27 15:05:31
1.2K0
发布2022-09-27 15:05:31
举报
文章被收录于专栏:又见苍岚

在成功建立本地 Waline 服务后,需要考虑之前 Waline 数据迁移的问题了。

背景

  • 国际版 LeanCloud 不能用了
  • Vercel 不能用了
  • 于是部署在 Vercel 上的 Waline 也不能用了
  • 本地部署的 Waline 也就失去了之前的评论数据
  • 需要将 LeanCloud 上的数据迁移到本地来
  • 数据源为 LeanCloud ,目标为 MongoDB 数据库格式,相信其他数据库也是类似的方法

下载 LeanCloud 备份数据

数据恢复

恢复思路
  • 一个正常的 MongoDB 数据库存储的评论为:
代码语言:javascript
复制
{'_id': ObjectId('6310577eb6b2b90cd6c84568'),
 'comment': '评论测试 <img class="wl-emoji"             src="https://cdn.jsdelivr.net/gh/walinejs/emojis/weibo/weibo_clap.png"             alt="weibo_clap"><img class="wl-emoji"             src="https://cdn.jsdelivr.net/gh/walinejs/emojis/weibo/weibo_clap.png"             alt="weibo_clap">',
 'insertedAt': datetime.datetime(2022, 9, 1, 6, 55, 58, 523000),
 'ip': '180.171.132.122',
 'link': 'https://www.zywvvd.com',
 'mail': 'zywvvd@mail.ustc.edu.cn',
 'nick': 'VVD',
 'pid': None,
 'rid': None,
 'status': 'approved',
 'ua': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,        like Gecko) Chrome/102.0.0.0 Safari/537.36',
 'url': '/notes/coding/internet/nginx-docker-https/nginx-docker-https/',
 'user_id': '63104d1dcae126118b6109f3'}

  • LeanCloud 下的数据为:
代码语言:javascript
复制
{"nick":"VVD","ip":"108.61.78.229",
"updatedAt":"2021-08-31T15:23:24.616Z",
"ACL":{"*":{"read":true,"write":true}},
"objectId":"612e496cdf64212dbbc96c97",
"mail":"zywvvd@mail.ustc.edu.cn",
"ua":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
 "insertedAt":{"__type":"Date","iso":"2021-08-31T15:23:24.126Z"},"createdAt":"2021-08-31T15:23:24.616Z",
 "status":"approved",
 "link":"www.zywvvd.com",
 "comment":"<p>hello world !</p>\\n",
 "url":"/notes/hexo/theme/fluid/fluid-waline/fluid-waline/",
 "user_id":"612e4539df64212dbbc967b1"}

  • 对于我的目标和源数据库来说,核心差异在于 insertedAt 的值类型,只要将 insertedAt 下的数据转化为 datetime.datetime 格式即可兼容
  • 还有对于回复的评论,其内容中会有两个变量 pid, rid,这两个变量需要指向回复的变量 _id 的 ID 内容,为了对其这项内容,将原始 objectId 命名 为当前 ID 即可
  • 之后参考 Python 链接/操作 MongoDB 数据库 操作将数据添加进 Waline 对应的数据库集合即可
参考代码
代码语言:javascript
复制
from pymongo import MongoClient
import mtutils as mt
import json
from pprint import pprint
import datetime
import re


def time_format_transfer(time_info):
    time_str = time_info['iso']
    res = re.search("(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{1,}).*", time_str)
    res_list = [int(res[index]) for index in range(1, 8)]
    time_obj = datetime.datetime(*res_list)
    return time_obj


if __name__ == '__main__':
    conn = MongoClient('127.0.0.1', 27017)
    db = conn.admin

    data_str_list = mt.file_read_lines('Comment.0.jsonl')[1:]
    collenction = db['Comment']

    for data_str in mt.tqdm(data_str_list):
        info = json.loads(data_str)
        res = time_format_transfer(info['insertedAt'])
        info['insertedAt'] = res
        pprint(info)
        info['_id'] = bson.objectid.ObjectId(info['objectId'])
        collenction.insert_one(info)
    pass

修复效果

  • 在博客文章的新 Waline 中可以看到之前以 LeanCloud 为后端时用户在 Waline 做出的评论

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月1日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 下载 LeanCloud 备份数据
  • 数据恢复
    • 恢复思路
      • 参考代码
      • 修复效果
      • 参考资料
      相关产品与服务
      云数据库 MongoDB
      腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档