开始从 discuzX3.4 迁移到 nodebb(一) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容

开始从 discuzX3.4 迁移到 nodebb(一)

  •  
  •   gj9590 2024 年 2 月 18 日 1069 次点击
    这是一个创建于 796 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先要了解下 discuzX3.4 和 nodebb 的数据库结构,discuzX 用的是 mysql ,nodebb 用的是 mongodb 。

    最重要的当然是用户相关的数据表和帖子数据表。discuzX 能查到数据表字典,nodebb 只能自己用 mongodb 的 admin 工具看了。

    一、用户数据

    1 、nodebb 和 discuz 数据表的对照

     Nodebb 用户表须用的数据(字段): 
    db.objects.findOne({username:"admin"}) --> { "_id" : ObjectId("65cb8801e09f69ff71141520"), "_key" : "user:1", "joindate" : 1707837441083, "lastonline" : 1708000177292, //"status" : "online", "uid" : 1, "username" : "admin", //"userslug" : "admin", "password" : "$2a$12$VIKLGFC3AS1B4sDuVNivIOQO1HVpxjdOJXyUDBnDZqbu5nK", //"password:shaWrapped" : 1, "email" : "[email protected]", //"email:confirmed" : 1, //"groupTitle" : "[\"\"]", //"gdpr_consent" : 1, "profileviews" : 0, // 空间点击数 views "reputation" : 0, // 声誉,积分 credits "topiccount" : 1, // 主题 threads "lastposttime" : 1707837441933, "postcount" : 1, // 帖子 posts (包含了主题) //"rss_token" : "17305070-9558-4f2a-bef1-aba7902e0990", "picture" : "/assets/uploads/profile/1-profileavatar-1707989852545.jpeg", "uploadedpicture" : "/assets/uploads/profile/1-profileavatar-1707989852545.jpeg", "fullname" : "全名 guojin", "aboutme" : "关于我是一个管理员", "birthday" : "2024-02-15", "location" : "广州", "signature" : "签名:我是一个管理员", "website" : "https://weibo.com/我的网" } 

    discuzX 的表分得比较散,有好几个表:

    pre_common_member 用户主表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员 id
    email char(40) NO 邮箱
    username char(15) NO 用户名
    password char(32) NO 密码
    status tinyint(1) 0 NO 判断用户是否已经删除 需要 discuz 程序加判断,并增加整体清理的功能。原 home 字段为 flag
    emailstatus tinyint(1) 0 NO email 是否经过验证 home 字段为 emailcheck
    avatarstatus tinyint(1) 0 NO 是否有头像 home 字段为 avatar
    videophotostatus tinyint(1) 0 NO 视频认证状态 home
    adminid tinyint(1) 0 NO 管理员 id
    groupid smallint(6) unsigned 0 NO 会员组 id
    groupexpiry int(10) unsigned 0 NO 用户组有效期
    extgroupids char(20) NO 扩展用户组
    regdate int(10) unsigned 0 NO 注册时间
    credits int(10) 0 NO 总积分
    notifysound tinyint(1) 0 NO 短信声音
    timeoffset char(4) NO 时区校正
    newpm smallint(6) unsigned 0 NO 新短消息数量
    newprompt smallint(6) unsigned 0 NO 新提醒数目
    accessmasks tinyint(1) 0 NO 标志
    allowadmincp tinyint(1) 0 NO 标志
    onlyacceptfriendpm tinyint(1) 0 NO 是否只接收好友短消息
    conisbind tinyint(1) unsigned 0 NO 用户是否绑定 QC

    uc_members 用户表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 用户 ID
    username char(15) NO 用户名
    password char(32) NO 密码
    email char(32) NO 用户 Email
    myid char(30) NO 漫游 id
    myidkey char(16) NO 漫游 id
    regip char(15) NO 注册 IP
    regdate int(10) unsigned 0 NO 注册时间
    lastloginip int(10) 0 NO 上次登陆的 IP(程序转换成数值类型)
    lastlogintime int(10) unsigned 0 NO 上次登录的时间
    salt char(6) NO 密码干扰串,用来和密码进行配合验证,防止被暴力破解
    secques char(8) NO 用户的安全提问

    pre_common_member_field_forum 用户论坛字段表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员 id
    publishfeed tinyint(3) 0 NO 用户自定义发送哪些类型的 feed(原字段为 customaddfeed)
    customshow tinyint(1) unsigned 26 NO 自定义帖子显示模式
    customstatus varchar(30) NO 自定义头衔
    medals text NO 勋章信息
    sightml text NO 签名
    groupterms text NO 公共用户组
    authstr varchar(20) NO 找回密码验证串
    groups mediumtext NO 用户所有群组
    attentiongroup varchar(255) NO 用户偏好

    pre_common_member_profile 用户栏目表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员 id
    realname varchar(255) NO 实名
    gender tinyint(1) 0 NO 性别 (0:保密 1:男 2:女)
    birthyear smallint(6) unsigned 0 NO
    birthmonth tinyint(3) unsigned 0 NO
    birthday tinyint(3) unsigned 0 NO
    constellation varchar(255) NO 星座(根据生日自动计算)
    zodiac varchar(255) NO 生肖(根据生日自动计算)
    telephone varchar(255) NO 固定电话
    mobile varchar(255) NO 手机
    idcardtype varchar(255) NO 证件类型:身份证 护照 军官证等
    idcard varchar(255) NO 证号码
    address varchar(255) NO 邮寄地址
    zipcode varchar(255) NO 邮编
    nationality varchar(255) NO 国籍
    birthprovince varchar(255) NO 出生省份
    birthcity varchar(255) NO 出生城市
    birthdist varchar(20) NO 出生行政区/县
    birthcommunity varchar(255) NO 出生小区
    resideprovince varchar(255) NO 居住省份
    residecity varchar(255) NO 居住城市
    residedist varchar(20) NO 居住行政区/县
    residecommunity varchar(255) NO 居住小区
    residesuite varchar(255) NO 小区、写字楼门牌号
    graduateschool varchar(255) NO 毕业学校
    company varchar(255) NO 公司
    education varchar(255) NO 学历
    occupation varchar(255) NO 职业
    position varchar(255) NO 职位
    revenue varchar(255) NO 年收入
    affectivestatus varchar(255) NO 情感状态
    lookingfor varchar(255) NO 交友目的(交友类型)
    bloodtype varchar(255) NO 血型
    height varchar(255) NO 身高
    weight varchar(255) NO 体重
    alipay varchar(255) NO 支付宝帐号
    icq varchar(255) NO ICQ
    qq varchar(255) NO QQ
    yahoo varchar(255) NO YAHOO
    msn varchar(255) NO MSN
    taobao varchar(255) NO 阿里旺旺
    site varchar(255) NO 主页
    bio text NO 自我介绍 来自论坛 bio 字段
    interest text NO 兴趣爱好
    field1 text NO 自定义字段 1
    field2 text NO 自定义字段 2
    field3 text NO 自定义字段 3
    field4 text NO 自定义字段 4
    field5 text NO 自定义字段 5
    field6 text NO 自定义字段 6
    field7 text NO 自定义字段 7
    field8 text NO 自定义字段 8

    pre_common_member_count 用户统计表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员 id
    extcredits1 int(10) 0 NO 声望
    extcredits2 int(10) 0 NO 金钱
    extcredits3 int(10) 0 NO 扩展
    extcredits4 int(10) 0 NO 扩展
    extcredits5 int(10) 0 NO 扩展
    extcredits6 int(10) 0 NO 扩展
    extcredits7 int(10) 0 NO 扩展
    extcredits8 int(10) 0 NO 扩展
    friends smallint(6) unsigned 0 NO 好友个数 home
    posts mediumint(8) unsigned 0 NO 帖子数
    threads mediumint(8) unsigned 0 NO 主题数
    digestposts smallint(6) unsigned 0 NO 精华数
    doings smallint(6) unsigned 0 NO 记录数
    blogs smallint(6) unsigned 0 NO 日志数
    albums smallint(6) unsigned 0 NO 相册数
    sharings smallint(6) unsigned 0 NO 分享数
    attachsize int(10) unsigned 0 NO 上传附件占用的空间 home
    views mediumint(8) unsigned 0 NO 空间查看数
    oltime smallint(6) unsigned 0 NO 在线时间
    todayattachs smallint(6) unsigned 0 NO 当天上传附件数
    todayattachsize int(10) unsigned 0 NO 当天上传附件容量
    feeds mediumint(8) unsigned 0 NO 广播数
    follower mediumint(8) unsigned 0 NO 听众数量
    following mediumint(8) unsigned 0 NO 收听数量
    newfollower mediumint(8) unsigned 0 NO 新增听众数量
    blacklist mediumint(8) unsigned 0 NO 拉黑用户数

    pre_common_member_status 用户状态表

    字段名 数据类型 默认值 允许非空 备注
    uid mediumint(8) unsigned NO 会员 id
    regip char(15) NO 注册 IP
    lastip char(15) NO 最后登录 IP
    lastvisit int(10) unsigned 0 NO 最后访问
    lastactivity int(10) unsigned 0 NO 最后活动
    lastpost int(10) unsigned 0 NO 最后发表
    lastsendmail int(10) unsigned 0 NO 上次发送 email 时间 home 原字段为 lastsend
    invisible tinyint(1) 0 NO 是否隐身登录
    buyercredit smallint(6) 0 NO 买家信用等级及积分
    sellercredit smallint(6) 0 NO 卖家信用等级及积分
    favtimes mediumint(8) unsigned 0 NO 个人空间收藏次数
    sharetimes mediumint(8) unsigned 0 NO 个人空间分享次数
    profileprogress tinyint(2) unsigned 0 NO 个人资料完成度

    2 、处理头像

    discuz 默认自定义头像目录:data/attachment/forum/pw/upload/33370.jpg

    discuzX 的默认自定议头像目录:

    /uc_server/data/avatar/xx/xx/xx_avatar_big.jpg

    其中 xx/xx/xx_ 正好是 uid ,位数不够的系统会自动补零

    因此写了个程序,把 xx_avatar_big.jpg 文件拷贝到一个目录里(一会儿复制到服务端去),并把文字名改为 xxxxxx_avatar_middle.jpg ,最后还把{uid: “xxxxxx”, path: "/assets/uploads/profile/dz_avatar/62011_avatar_big.jpg”} 存成 json 文件,以备后面使用。

    服务端我复制到目录:~/nodebb/public/uploads/profile/dz_avatar

    python 程序:

    find_avatar.py

    avatar_data.json

    3 、nodebb discuz 用户数据对照表:

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3059 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 125ms UTC 06:00 PVG 14:00 LAX 23:00 JFK 02:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86