MongoDB使用Golang
目录
MongoDB(使用Golang)
什么是MongoDB
MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写。它是一个 NoSQL 数据库,旨在为现代应用提供高性能、高可用性和可扩展性。
特点
- 文档存储 :MongoDB 使用 BSON(类似 JSON 的二进制格式)存储数据。
- 灵活的模式 :无需预定义数据结构,支持动态模式。
- 高性能 :支持索引、复制和分片,提供高效的数据访问和存储。
- 高可用性 :通过复制集实现数据的高可用性和自动故障恢复。
- 可扩展性 :支持水平扩展,通过分片技术处理大规模数据。
使用场景
- 大数据应用 :适用于需要处理大量数据的应用,如日志分析、实时数据处理等。
- 内容管理系统 :适用于需要灵活数据模型的内容管理系统。
- 物联网 :适用于需要存储和处理大量传感器数据的物联网应用。
基本命令
show dbs
:显示所有数据库。use <database>
:切换到指定数据库。show collections
:显示当前数据库中的所有集合。db.<collection>.find()
:查询集合中的所有文档。
参考资料
基本操作示例
插入文档
db.collection.insertOne({ name: "Alice", age: 25, city: "New York" });
db.collection.insertMany([
{ name: "Bob", age: 30, city: "San Francisco" },
{ name: "Charlie", age: 35, city: "Los Angeles" }
]);
查询文档
db.collection.find({ name: "Alice" });
db.collection.find({ age: { $gt: 30 } });
更新文档
db.collection.updateOne({ name: "Alice" }, { $set: { age: 26 } });
db.collection.updateMany({ city: "New York" }, { $set: { city: "Boston" } });
删除文档
db.collection.deleteOne({ name: "Alice" });
db.collection.deleteMany({ age: { $lt: 30 } });
创建索引
db.collection.createIndex({ name: 1 });
使用 Golang 连接 MongoDB
安装 MongoDB Go 驱动
首先,使用
go get
命令安装 MongoDB 的 Go 驱动:
go get go.mongodb.org/mongo-driver/mongo
连接到 MongoDB
以下是一个简单的示例,演示如何使用 Golang 连接到 MongoDB 并进行基本的 CRUD 操作:
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// 设置 MongoDB 客户端选项
clientOptions := options.Client().ApplyURI("mongodb://localhost: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("testdb").Collection("testcollection")
// 插入文档
insertResult, err := collection.InsertOne(context.TODO(), bson.D{
{Key: "name", Value: "Alice"},
{Key: "age", Value: 25},
{Key: "city", Value: "New York"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println("Inserted a single document: ", insertResult.InsertedID)
// 查询文档
var result bson.M
err = collection.FindOne(context.TODO(), bson.D{{Key: "name", Value: "Alice"}}).Decode(&result)
if err != nil {
log.Fatal(err)
}
fmt.Println("Found a single document: ", result)
// 更新文档
updateResult, err := collection.UpdateOne(context.TODO(), bson.D{{Key: "name", Value: "Alice"}}, bson.D{
{Key: "$set", Value: bson.D{
{Key: "age", Value: 26},
}},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Matched %v documents and updated %v documents.\n", updateResult.MatchedCount, updateResult.ModifiedCount)
// 删除文档
deleteResult, err := collection.DeleteOne(context.TODO(), bson.D{{Key: "name", Value: "Alice"}})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Deleted %v documents in the collection\n", deleteResult.DeletedCount)
// 断开连接
err = client.Disconnect(context.TODO())
if err != nil {
log.Fatal(err)
}
fmt.Println("Connection to MongoDB closed.")
}
运行示例
确保 MongoDB 服务正在运行,然后使用以下命令运行上述 Go 程序:
go run main.go
该程序将演示如何连接到 MongoDB、插入文档、查询文档、更新文档和删除文档
定时将 MongoDB 数据添加到 MySQL
以下是一个使用 Golang 定时将 MongoDB 数据添加到 MySQL 的示例:
安装依赖
首先,使用
go get
命令安装所需的依赖:
go get go.mongodb.org/mongo-driver/mongo
go get -u github.com/go-sql-driver/mysql
代码示例
package main
import (
"context"
"database/sql"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MongoDB 客户端选项
mongoClientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
// 连接到 MongoDB
mongoClient, err := mongo.Connect(context.TODO(), mongoClientOptions)
if err != nil {
log.Fatal(err)
}
defer mongoClient.Disconnect(context.TODO())
// MySQL 数据库连接
mysqlDB, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/testdb")
if err != nil {
log.Fatal(err)
}
defer mysqlDB.Close()
// 定时任务
ticker := time.NewTicker(1 * time.Hour)
defer ticker.Stop()
for {
select {
case <-ticker.C:
transferData(mongoClient, mysqlDB)
}
}
}
func transferData(mongoClient *mongo.Client, mysqlDB *sql.DB) {
// 获取 MongoDB 集合
collection := mongoClient.Database("testdb").Collection("testcollection")
// 查询 MongoDB 数据
cursor, err := collection.Find(context.TODO(), bson.D{})
if err != nil {
log.Fatal(err)
}
defer cursor.Close(context.TODO())
// 遍历 MongoDB 数据并插入 MySQL
for cursor.Next(context.TODO()) {
var document bson.M
if err := cursor.Decode(&document); err != nil {
log.Fatal(err)
}
name := document["name"].(string)
age := document["age"].(int32)
city := document["city"].(string)
_, err := mysqlDB.Exec("INSERT INTO users (name, age, city) VALUES (?, ?, ?)", name, age, city)
if err != nil {
log.Fatal(err)
}
}
if err := cursor.Err(); err != nil {
log.Fatal(err)
}
fmt.Println("Data transferred from MongoDB to MySQL successfully.")
}
运行示例
确保 MongoDB 和 MySQL 服务正在运行,然后使用以下命令运行上述 Go 程序:
go run main.go
该程序将每小时定时从 MongoDB 查询数据并插入到 MySQL 中。