package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"log"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type Student struct {
Name string
Age int
}
func main() {
// 设置客户端连接配置
clientOptions := options.Client().ApplyURI("mongodb://192.168.236.139:27017")
// 连接到MongoDB
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
// 检查连接
err = client.Ping(context.TODO(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println("Connected to MongoDB!")
// 指定获取要操作的数据集
collection := client.Database("articledb").Collection("houtai")
fmt.Println(collection)
// 指定获取要操作的数据集
collection = client.Database("school").Collection("student")
s1 := Student{"小黑", 13}
//1.插入
insertResult,err := collection.InsertOne(context.TODO(),s1)
if err != nil {
log.Fatal(err)
}
fmt.Println("插入成功: ", insertResult.InsertedID)
//2.updateone()方法允许你更新单个文档。它需要一个筛选器文档来匹配数据库中的文档,并需要一个更新文档来描述更新操作。你可以使用bson.D类型来构建筛选文档和更新文档:
filter := bson.D{{"name", "小黑"}}
update := bson.D{
{"$inc", bson.D{
{"age", 1},
}},
}
updateResult, err := collection.UpdateOne(context.TODO(),filter,update)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Matched %v documents and 更新 %v 文档.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
//3.查找文档
//要找到一个文档,你需要一个filter文档,以及一个指向可以将结果解码为其值的指针。要查找单个文档,使用collection.FindOne()。这个方法返回一个可以解码为值的结果。
//我们使用上面定义过的那个filter来查找姓名为’小兰’的文档。
var result Student
err = collection.FindOne(context.TODO(),filter).Decode(&result)
if err != nil {
log.Fatal(err)
}
fmt.Printf("查到文档: %+v\n", result)
// 查询多个
// 将选项传递给Find()
findOptions := options.Find()
findOptions.SetLimit(10)
// 定义一个切片用来存储查询结果
var results []*Student
// 把bson.D{{}}作为一个filter来匹配所有文档
cur, err := collection.Find(context.TODO(), bson.D{{"name", "小红"}}, findOptions)
if err != nil {
log.Fatal(err)
}
// 查找多个文档返回一个光标
// 遍历游标允许我们一次解码一个文档
for cur.Next(context.TODO()) {
// 创建一个值,将单个文档解码为该值
var elem Student
err := cur.Decode(&elem)
if err != nil {
log.Fatal(err)
}
results = append(results, &elem)
}
if err := cur.Err(); err != nil {
log.Fatal(err)
}
// 完成后关闭游标
cur.Close(context.TODO())
fmt.Printf("Found multiple documents (array of pointers)=: %#v\n", results)
for _,val := range results{
fmt.Printf("%v\n",*val)
}
//删除文档
//最后,可以使用collection.DeleteOne()或collection.DeleteMany()删除文档。如果你传递bson.D{{}}作为过滤器参数,它将匹配数据集中的所有文档。还可以使用collection. drop()删除整个数据集。
// 删除名字是小黄的那个
deleteResult1, err := collection.DeleteOne(context.TODO(), bson.D{{"name","小红"}})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult1.DeletedCount)
// 删除所有
//deleteResult2, err := collection.DeleteMany(context.TODO(), bson.D{{}})
//if err != nil {
// log.Fatal(err)
//}
//fmt.Printf("Deleted %v documents in the trainers collection\n", deleteResult2.DeletedCount)
//断开连接
err = client.Disconnect(context.TODO())
if err != nil {
log.Fatal(err)
}
fmt.Println("断开连接成功")
}
Golang操作Mongodb
最新推荐文章于 2023-11-28 22:26:39 发布