# OpenIM MongoDB 集合说明 本文档基于当前代码实现整理(`pkg/common/storage/database` + `pkg/common/storage/model`),用于说明 OpenIM 使用的 MongoDB 集合、核心字段和用途。 ## 说明 - 集合来源: - 常量定义:`pkg/common/storage/database/name.go` - 硬编码集合:`db.Collection("...")` - 字段口径:以结构体 `bson` tag 为准。 - 不包含测试代码中的临时集合(如 `msg3`、`version_test`)。 ## 集合清单(按名称排序) ### `black` - 用途:用户拉黑关系。 - 核心结构体:`model.Black` - 字段: - `owner_user_id` (`string`):拉黑关系所属用户 - `block_user_id` (`string`):被拉黑用户 - `create_time` (`time.Time`):创建时间 - `add_source` (`int32`):添加来源 - `operator_user_id` (`string`):操作人 - `ex` (`string`):扩展信息 ### `conversation` - 用途:用户会话配置和会话序列范围。 - 核心结构体:`model.Conversation` - 字段: - `owner_user_id` (`string`):会话所属用户 - `conversation_id` (`string`):会话 ID - `conversation_type` (`int32`):会话类型 - `user_id` (`string`):单聊对端用户 - `group_id` (`string`):群聊群 ID - `recv_msg_opt` (`int32`):消息接收选项 - `is_pinned` (`bool`):是否置顶 - `is_private_chat` (`bool`):是否私聊 - `burn_duration` (`int32`):阅后即焚时长 - `group_at_type` (`int32`):群 @ 设置 - `attached_info` (`string`):附加信息 - `ex` (`string`):扩展信息 - `max_seq` (`int64`):会话最大序列号 - `min_seq` (`int64`):会话最小序列号 - `create_time` (`time.Time`):创建时间 - `is_msg_destruct` (`bool`):是否开启消息自毁 - `msg_destruct_time` (`int64`):消息自毁时间 - `latest_msg_destruct_time` (`time.Time`):最近自毁更新时间 ### `conversation_version` - 用途:会话增量同步版本日志。 - 核心结构体:`model.VersionLogTable` - 字段: - `_id` (`primitive.ObjectID`):主键 - `d_id` (`string`):维度 ID(通常 owner 维度) - `logs` (`[]VersionLogElem`):变更明细 - `version` (`uint`):当前版本 - `deleted` (`uint`):删除计数/版本标记 - `last_update` (`time.Time`):最后更新时间 - `logs` 元素字段(`model.VersionLogElem`): - `e_id` (`string`):元素 ID - `state` (`int32`):状态(新增/删除/更新) - `version` (`uint`):元素版本 - `last_update` (`time.Time`):元素更新时间 ### `crypto_device`(硬编码) - 用途:端到端加密设备信息。 - 核心结构体:`model.CryptoDevice` - 字段: - `device_id` (`string`):设备 ID - `user_id` (`string`):用户 ID - `platform` (`string`):平台 - `device_model` (`string`):设备型号 - `app_version` (`string`):应用版本 - `virgil_identity` (`string`):加密身份 - `status` (`string`):设备状态 - `last_seen_at` (`time.Time`):最近活跃时间 - `create_time` (`time.Time`):创建时间 ### `friend` - 用途:好友关系与好友属性。 - 核心结构体:`model.Friend` - 字段: - `_id` (`primitive.ObjectID`):主键 - `owner_user_id` (`string`):关系所属用户 - `friend_user_id` (`string`):好友用户 - `remark` (`string`):备注 - `create_time` (`time.Time`):创建时间 - `add_source` (`int32`):添加来源 - `operator_user_id` (`string`):操作人 - `ex` (`string`):扩展信息 - `is_pinned` (`bool`):是否置顶 - `is_muted` (`bool`):是否免打扰 - `mute_duration` (`int64`):免打扰时长 - `mute_end_time` (`int64`):免打扰结束时间 ### `friend_request` - 用途:好友申请记录。 - 核心结构体:`model.FriendRequest` - 字段: - `from_user_id` (`string`):申请人 - `to_user_id` (`string`):被申请人 - `handle_result` (`int32`):处理结果 - `req_msg` (`string`):申请附言 - `create_time` (`time.Time`):申请时间 - `handler_user_id` (`string`):处理人 - `handle_msg` (`string`):处理说明 - `handle_time` (`time.Time`):处理时间 - `ex` (`string`):扩展信息 ### `friend_version` - 用途:好友列表版本日志(增量同步)。 - 核心结构体:`model.VersionLogTable` - 字段:同 `conversation_version` ### `group` - 用途:群资料与群权限配置。 - 核心结构体:`model.Group` - 字段: - `group_id` (`string`):群 ID - `group_name` (`string`):群名 - `notification` (`string`):群公告 - `introduction` (`string`):群介绍 - `face_url` (`string`):群头像 - `create_time` (`time.Time`):创建时间 - `ex` (`string`):扩展信息 - `status` (`int32`):群状态 - `creator_user_id` (`string`):创建者 - `group_type` (`int32`):群类型 - `need_verification` (`int32`):入群验证策略 - `look_member_info` (`int32`):成员信息可见策略 - `apply_member_friend` (`int32`):成员加好友策略 - `notification_update_time` (`time.Time`):公告更新时间 - `notification_user_id` (`string`):公告更新人 - `allow_send_msg` (`int32`):发言权限 - `allow_pin_msg` (`int32`):置顶消息权限 - `allow_add_member` (`int32`):拉人权限 - `allow_edit_group_info` (`int32`):编辑群资料权限 ### `group_join_version` - 用途:群成员入群事件版本日志。 - 核心结构体:`model.VersionLogTable` - 字段:同 `conversation_version` ### `group_key_event`(硬编码) - 用途:群密钥版本事件。 - 核心结构体:`model.GroupKeyEvent` - 字段: - `event_id` (`string`):事件 ID - `group_id` (`string`):群 ID - `group_key_version` (`int64`):群密钥版本 - `event_type` (`string`):事件类型 - `operator_user_id` (`string`):操作人 - `create_time` (`time.Time`):事件时间 ### `group_key_version`(硬编码) - 用途:记录群当前密钥版本。 - 核心结构体:`model.GroupKeyVersion` - 字段: - `group_id` (`string`):群 ID - `group_key_version` (`int64`):当前密钥版本 ### `group_member` - 用途:群成员关系与成员属性。 - 核心结构体:`model.GroupMember` - 字段: - `group_id` (`string`):群 ID - `user_id` (`string`):用户 ID - `nickname` (`string`):群昵称 - `face_url` (`string`):头像 - `role_level` (`int32`):角色等级 - `join_time` (`time.Time`):入群时间 - `join_source` (`int32`):入群来源 - `inviter_user_id` (`string`):邀请人 - `operator_user_id` (`string`):操作人 - `mute_end_time` (`time.Time`):禁言结束时间 - `ex` (`string`):扩展信息 ### `group_member_version` - 用途:群成员版本日志。 - 核心结构体:`model.VersionLogTable` - 字段:同 `conversation_version` ### `group_request` - 用途:入群申请记录。 - 核心结构体:`model.GroupRequest` - 字段: - `user_id` (`string`):申请人 - `group_id` (`string`):目标群 - `handle_result` (`int32`):处理结果 - `req_msg` (`string`):申请信息 - `handled_msg` (`string`):处理说明 - `req_time` (`time.Time`):申请时间 - `handle_user_id` (`string`):处理人 - `handled_time` (`time.Time`):处理时间 - `join_source` (`int32`):入群来源 - `inviter_user_id` (`string`):邀请人 - `ex` (`string`):扩展信息 ### `log` - 用途:客户端日志上报元数据。 - 核心结构体:`model.Log` - 字段: - `log_id` (`string`):日志 ID - `platform` (`string`):平台 - `user_id` (`string`):用户 ID - `create_time` (`time.Time`):创建时间 - `url` (`string`):日志文件 URL - `file_name` (`string`):文件名 - `system_type` (`string`):系统类型 - `app_framework` (`string`):应用框架 - `version` (`string`):版本 - `ex` (`string`):扩展信息 ### `msg` - 用途:聊天消息主存储(按会话 + 分片存放)。 - 核心结构体(分层): - `model.MsgDocModel` - `model.MsgInfoModel` - `model.MsgDataModel` - `model.RevokeModel` - `model.OfflinePushModel` - 字段: - `MsgDocModel` - `doc_id` (`string`):文档 ID(会话 + 分片序号) - `msgs` (`[]*MsgInfoModel`):消息数组 - `MsgInfoModel` - `msg` (`*MsgDataModel`):消息体 - `revoke` (`*RevokeModel`):撤回信息 - `del_list` (`[]string`):逻辑删除用户列表 - `is_read` (`bool`):读状态 - `MsgDataModel` - `send_id` (`string`):发送者 - `recv_id` (`string`):接收者(单聊) - `group_id` (`string`):群 ID(群聊) - `client_msg_id` (`string`):客户端消息 ID - `server_msg_id` (`string`):服务端消息 ID - `sender_platform_id` (`int32`):发送平台 - `sender_nickname` (`string`):发送者昵称 - `sender_face_url` (`string`):发送者头像 - `session_type` (`int32`):会话类型 - `msg_from` (`int32`):消息来源 - `content_type` (`int32`):内容类型 - `content` (`string`):消息内容 - `seq` (`int64`):消息序号 - `send_time` (`int64`):发送时间 - `create_time` (`int64`):创建时间 - `status` (`int32`):状态 - `is_read` (`bool`):已读标记 - `options` (`map[string]bool`):扩展选项 - `offline_push` (`*OfflinePushModel`):离线推送 - `at_user_id_list` (`[]string`):@用户列表 - `attached_info` (`string`):附加信息 - `ex` (`string`):扩展信息 - `RevokeModel` - `role` (`int32`):撤回角色 - `user_id` (`string`):撤回人 ID - `nickname` (`string`):撤回人昵称 - `time` (`int64`):撤回时间 - `OfflinePushModel` - `title` (`string`):推送标题 - `desc` (`string`):推送描述 - `ex` (`string`):扩展 - `ios_push_sound` (`string`):iOS 声音 - `ios_badge_count` (`bool`):iOS 角标策略 ### `phone_sn_info` - 用途:手机号与发送状态信息。 - 核心结构体:`model.PhoneSNInfo` - 字段: - `phone` (`string`):手机号 - `user_id` (`int64`):关联用户 ID - `is_snd` (`bool`):业务发送标识 - `send_count` (`int64`):最近 1 分钟发送计数(当前实现新增) - `update_time` (`int64`):更新时间(毫秒) ### `s3` - 用途:对象存储文件元数据。 - 核心结构体:`model.Object` - 字段: - `name` (`string`):对象名 - `user_id` (`string`):上传用户 - `hash` (`string`):文件哈希 - `engine` (`string`):存储引擎 - `key` (`string`):对象 key - `size` (`int64`):文件大小 - `content_type` (`string`):MIME 类型 - `group` (`string`):分组 - `create_time` (`time.Time`):创建时间 ### `seq` - 用途:会话级消息序列范围。 - 核心结构体:`model.SeqConversation` - 字段: - `conversation_id` (`string`):会话 ID - `max_seq` (`int64`):最大序列 - `min_seq` (`int64`):最小序列 ### `seq_user` - 用途:用户会话维度消息序列与已读位点。 - 核心结构体:`model.SeqUser` - 字段: - `user_id` (`string`):用户 ID - `conversation_id` (`string`):会话 ID - `min_seq` (`int64`):最小序列 - `max_seq` (`int64`):最大序列 - `read_seq` (`int64`):已读序列 ### `signal_invitation` - 用途:音视频邀请信令(支持 TTL 过期清理)。 - 核心结构体:`model.SignalInvitation` - 字段: - `room_id` (`string`):房间 ID - `inviter_user_id` (`string`):邀请人 - `invitee_user_id_list` (`[]string`):被邀请人列表 - `custom_data` (`string`):自定义数据 - `group_id` (`string`):群 ID - `timeout` (`int32`):超时时间 - `media_type` (`string`):媒体类型 - `platform_id` (`int32`):平台 ID - `session_type` (`int32`):会话类型 - `initiate_time` (`int64`):发起时间 - `busy_line_user_id_list` (`[]string`):忙线用户 - `offline_push_title` (`string`):离线推送标题 - `offline_push_desc` (`string`):离线推送描述 - `offline_push_ex` (`string`):离线推送扩展 - `create_time` (`int64`):创建时间 - `expire_at` (`time.Time`):过期时间(TTL) ### `signal_record` - 用途:音视频通话记录。 - 核心结构体:`model.SignalRecord` - 字段: - `sid` (`string`):记录 ID - `room_id` (`string`):房间 ID - `file_name` (`string`):文件名 - `media_type` (`string`):媒体类型 - `session_type` (`int32`):会话类型 - `inviter_user_id` (`string`):邀请人 - `inviter_user_nickname` (`string`):邀请人昵称 - `group_id` (`string`):群 ID - `group_name` (`string`):群名 - `inviter_user_id_list` (`[]string`):参与用户列表 - `send_id` (`string`):发送者 - `recv_id` (`string`):接收者 - `create_time` (`int64`):创建时间 - `end_time` (`int64`):结束时间 - `file_size` (`string`):文件大小 - `file_url` (`string`):文件 URL ### `spam_report` - 用途:垃圾消息/用户举报与处理记录。 - 核心结构体:`model.SpamReport` - 字段: - `_id` (`primitive.ObjectID`):主键 - `report_id` (`string`):举报 ID - `reporter_user_id` (`string`):举报人 - `reported_user_id` (`string`):被举报人 - `conversation_id` (`string`):会话 ID - `client_msg_id` (`string`):客户端消息 ID - `seq` (`int64`):消息序号 - `reason_type` (`int32`):举报类型 - `reason` (`string`):举报原因 - `status` (`int32`):处理状态 - `create_time` (`time.Time`):创建时间 - `handle_time` (`time.Time`):处理时间 - `handler_user_id` (`string`):处理人 - `ex` (`string`):扩展信息 ### `user` - 用途:用户主资料与可见性/通话/消息设置。 - 核心结构体:`model.User` - 字段: - `user_id` (`string`):用户 ID - `nickname` (`string`):昵称 - `face_url` (`string`):头像 - `ex` (`string`):扩展 - `app_manger_level` (`int32`):应用管理级别 - `global_recv_msg_opt` (`int32`):全局消息接收选项 - `create_time` (`time.Time`):创建时间 - `phone` (`string`):手机号 - `phone_visibility` (`int32`):手机号可见性 - `call_accept_setting` (`int32`):通话接受策略 - `msg_receive_setting` (`int32`):消息接收策略 ### `userCommands`(硬编码) - 用途:用户命令记录。 - 数据来源:`mgo/user.go` 内部通过 `bson.M` 直接操作。 - 字段: - `userID` (`string`):用户 ID - `type` (`int32`):命令类型 - `uuid` (`string`):命令唯一 ID - `createTime` (`int64`):创建时间(秒) - `value` (`string`):值 - `ex` (`string`):扩展 ### `user_global_black_list` - 用途:全局黑名单。 - 核心结构体:`model.UserGlobalBlack` - 字段: - `user_id` (`string`):被封禁用户 ID - `nickname` (`string`):昵称 - `operator_id` (`string`):操作人 - `reason` (`string`):原因 - `create_time` (`time.Time`):创建时间 ## 常见索引说明(摘要) - `msg`:`doc_id` 唯一索引。 - `conversation`:`(owner_user_id, conversation_id)` 唯一索引。 - `friend`:`(owner_user_id, friend_user_id)` 唯一索引。 - `group_member`:`(group_id, user_id)` 唯一索引。 - `signal_invitation`:`room_id` 唯一索引,`expire_at` TTL 索引。 - `phone_sn_info`:`phone` 唯一索引。 - `spam_report`:`report_id` 唯一索引。