写个golang可以监听mongodb插入事件,并取得插入数据的OwnerID、name 、QuotaSize
时间: 2023-12-24 17:06:14 浏览: 229
mongodb插入数据
可以使用MongoDB的Change Streams API来监听插入事件,并从事件中获取所需的数据。
以下是一个示例代码:
```go
package main
import (
"context"
"fmt"
"log"
"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.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
defer client.Disconnect(context.Background())
// 指定要监听的集合、过滤条件和输出字段
pipeline := mongo.Pipeline{
{{"$match", bson.D{{"operationType", "insert"}}}},
{{"$project", bson.D{
{"_id", 0},
{"fullDocument.OwnerID", 1},
{"fullDocument.name", 1},
{"fullDocument.QuotaSize", 1},
}}},
}
collection := client.Database("test").Collection("users")
// 创建Change Stream
changeStream, err := collection.Watch(context.Background(), pipeline)
if err != nil {
log.Fatal(err)
}
defer changeStream.Close(context.Background())
// 处理Change Stream事件
for changeStream.Next(context.Background()) {
var event struct {
FullDocument struct {
OwnerID string `bson:"OwnerID"`
Name string `bson:"name"`
QuotaSize int `bson:"QuotaSize"`
} `bson:"fullDocument"`
}
if err := changeStream.Decode(&event); err != nil {
log.Fatal(err)
}
fmt.Printf("OwnerID: %s, name: %s, QuotaSize: %d\n", event.FullDocument.OwnerID, event.FullDocument.Name, event.FullDocument.QuotaSize)
}
if err := changeStream.Err(); err != nil {
log.Fatal(err)
}
}
```
该代码可以监听名为"test"的MongoDB数据库中"users"集合的插入事件,并从事件中获取OwnerID、name和QuotaSize字段。你可以根据实际情况修改集合名称、过滤条件和输出字段。
阅读全文