mongodb 需要2.6版本以上
mongodb可以去阿里云的镜像站下载,有yum源
mongodb的driver
go get github.com/mongodb/mongo-go-driver
package main
import (
"context"
"fmt"
"github.com/mongodb/mongo-go-driver/bson/primitive"
"github.com/mongodb/mongo-go-driver/mongo"
"github.com/mongodb/mongo-go-driver/mongo/options"
"time"
)
type TimePoint struct {
StartTime int64 `bson:"startTime"`
EndTIme int64 `bson:"endTime"`
}
// 存储在mongodb中的内容
type RecordLog struct {
JobName string `bson:"jobName"`
Command string `bson:"command"`
Err string `bson:"err"`
Content string `bson:"content"`
Timepoint TimePoint `bson:"timepoint"`
}
type LogRecord struct {
JobName string `bson:"jobName"`
}
func InsertRecord(client *mongo.Client, collect *mongo.Collection) (insertID primitive.ObjectID) {
collect = client.Database("corn").Collection("jobs")
record := &RecordLog{
JobName: "job1",
Command: "main.go",
Err: "",
Content: "Hello_World",
Timepoint: TimePoint{
StartTime: time.Now().Unix(),
EndTIme: time.Now().Unix() + 10,
},
}
insertRest, err := collect.InsertOne(context.TODO(), record)
if err != nil {
fmt.Println(err)
return
}
insertID = insertRest.InsertedID.(primitive.ObjectID)
return insertID
}
func FindLog(collect *mongo.Collection) {
// 创建需要过滤的条件
logred := &LogRecord{
JobName: "job1",
}
var skip int64 = 0//从那个开始
var limit int64 = 2//炼制几个输出字段
cursor, err := collect.Find(context.TODO(), logred, &options.FindOptions{
Skip: &skip,
Limit: &limit,
})
if err != nil {
fmt.Println(err)
return
}
defer cursor.Close(context.TODO())
for cursor.Next(context.TODO()) {
//创建需要反序列化成什么样子的结构体对象
records := &RecordLog{}
//反序列化
err = cursor.Decode(records)
if err != nil {
fmt.Println(err)
return
}
//打印
fmt.Println(*records)
}
}
func main() {
//创建上下文
ctx, cancelFunc := context.WithCancel(context.TODO())
time.AfterFunc(10*time.Second, func() {
cancelFunc()
})
//常见数据库连接
client, err := mongo.Connect(ctx, "mongodb://192.168.1.105:27017")
if err != nil {
fmt.Println(err)
return
}
collect := client.Database("corn").Collection("jobs")
//插入数据
//InsertRecord(client, collect)
//查询数据
FindLog(collect)
}