0x01 概述
查看Raspcloud中关于mongoDB的源码,了解涉及mongoDB的内容后,将其替换成es数据库
0x02 Mongo.go
主要分为以下几个部分:导入包、设置全局变量、初始化数据库、会话管理和数据库操作。
重点看一下数据库操作的内容。
计数:返回指定集合中所有文档的数量。
func Count(collection string) (int, error) { newSession := NewSession() defer newSession.Close() return newSession.DB(DbName).C(collection).Count() }
创建索引:
func CreateIndex(collection string, index *mgo.Index) error { newSession := NewSession() defer newSession.Close() return newSession.DB(DbName).C(collection).EnsureIndex(*index) }
插入文档:
func Insert(collection string, doc interface{}) error { newSession := NewSession() defer newSession.Close() return newSession.DB(DbName).C(collection).Insert(doc) // 向集合中插入新文档 }
更新:
func UpsertId(collection string, id interface{}, doc interface{}) error { newSession := NewSession() defer newSession.Close() _, err := newSession.DB(DbName).C(collection).UpsertId(id, doc) return err }
查询全部文档:
func FindAll(collection string, query interface{}, result interface{}, skip int, limit int, sortFields ...string) (count int, err error) { newSession := NewSession() defer newSession.Close() count, err = newSession.DB(DbName).C(collection).Find(query).Count() if err != nil { return } err = newSession.DB(DbName).C(collection).Find(query).Skip(skip).Limit(limit).Sort(sortFields...).All(result) return }
不再一一列举
0x03 具体查看使用了mongoDB的内容
plugin.go:
这里使用了 mongo 包的 FindOne 函数,用于在 app 集合中查询 selected_plugin_id 为 pluginId 的文档,返回找到的文档并存入 app 变量。
kafka:
mongo.FindId(kafkaAddrCollectionName, appId, &kafka):
调用 mongo 包的 FindId 方法,通过 appId 在 kafkaAddrCollectionName 集合中查找文档,找到的文档会存入 kafka 变量中。
使用 mongo.UpsertId 执行数据库的 upsert 操作:根据 appId 是否存在进行更新或者插入操作。
调用 mongo.Count 函数来获取 appCollectionName 集合中的文档数量。
0x04 暂停
具体看了rasp-cloud中的代码,发现涉及到mongoDB的地方远远超出我的想象,是否能够将mongoDB全部替换为es。
0x05 后续
做一个测试项目,包含mongo.go、elasticsearch.go和部分使用了mongo的代码,尝试是否可以将其中的mongo替换成elasticsearch.go。