好友
阅读权限 10
听众
最后登录 1970-1-1
XMQ
发表于 2021-8-10 14:33
最近用到了mongodb数据库,在此记录下基本操作和知识点
mongodb --- nosql 数据库,一般被用来存储聊天,新闻,博客等含有复杂结构的数据。
1. 下载,安装(百度)
2. 一些基本命令
显示数据库 show dbs / show databases 切换数据库 use xxxx
查看数据库中的数据集(表) show collections 查看数据集中的数据
db.表名.find()
查看指定数据 db.表名.find({key:value})
db.表名.find({key:value}).count() 查看数量
db.表名.find({key:value}).length() 查看数量 删除 db.student.deleteOne(doc) 删除一个
db.student.deleteMany(doc) 删除多个
remove({}) 全部删除 ...... 其他推荐看官方文档
3. 用 go 来操作
首先,下载相关的依赖
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
接着,连接数据库,调用mongo.Connect 方法
func ConnectToDB(url,name string,timeout time.Duration,num uint64)(*mongo.Database,error){
ctx, cancel := context.WithTimeout(context.Background(), timeout) // 连接超时
defer cancel()
o := options.Client().ApplyURI(url)
o.SetMaxPoolSize(num) // 连接做大数量
client, err := mongo.Connect(ctx, o)
if err != nil {
return nil, err
}
return client.Database(name), nil
}
myClient, err := ConnectToDB("mongodb://127.0.0.1:27017" , "bigdata" , 10 , 100 )
也可以用client.Ping 方法来测试连接是否成功
err = client.Ping(context.TODO(), nil)if err != nil {
log.Println(" 数据库连接失败 " )
return
}
连接成功后,接下来是插入数据
在插入之前,先定义要插入的结构体
type Student struct { Id string `json:"id" bson:"_id "` // 返回_id (
Name string
Age int
} 如果你的结构体没有此字段,是不会返回_id)_id: 是mongodb在每插入一条数据时自动生成唯一的一个标识符,它前4个字节表示时间戳,接着3位是机器识别码,之后2位是进程的pid值,最后3位是随机数
[/table]
插入一条数据 s1 := Student{"xiaoming",20}
insertResult, err := collection.InsertOne(context. TODO(), s1) 插入多条数据
s3 := s1
students := []interface{}{s2, s3}
insertManyResult, err := collection.InsertMany(context. TODO(), students)
查找数据
[table]
filter := bson.D{{ "title" , "python5555" }} 创建一个过滤条件
err = collection.FindOne(context. TODO(), filter ).Decode(&article) 查找单条数据 cur,err := collection.Find(context.TODO(),filter) 查找多条数据
###注意,查询多条返回的是一个游标,我们得通过cur.next() 方法把数据循环遍历出来
find := options.Find()
find.SetLimit( 3 ) // 限制返回多少条数据
cur,err := collection.Find(context.TODO(),filter)
// cur 是一个游标,然后通过next遍历出来
for cur.Next(context.TODO()){
var el = article // 自定义
err := cur.Decode(&el)
if err != nil {
fmt.Println("查找失败")
}
fmt.Println("el",el)
article2 = append(article2,el)
}
defer cur.Close(context.TODO()) // 最后关闭游标
更新 (通过filter来更新)
updateResult, err := collection.UpdateMany(context.TODO(),filter,update) // 更新多条数据
collection.UpdateOne() // 更新一条
collection.UpdateByID() // 通过_id来更新
删除
deleteResult, err := collection.DeleteMany(context.TODO(), filter) // 返回删除的条数
还有其他很多功能,感兴趣的小伙伴上github看文档
补充一个通过_id来查找数据
oid ,err:= primitive.ObjectIDFromHex ("61109dc7793ae6be4483f96a");
filter2 :=bson.M{"_id":oid}
var article rep.ArticleList
err = collection.FindOne(context.TODO(),filter2).Decode(&article)
if err != nil {
fmt.Println("查找失败")
} 先获取_id,然后通过primitive.ObjectIDFromHex("")方法获取ObjectID,在创建过滤器来查找就行
~~~~~~~~~end~~~~~~~~~~~~~~~~
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。