要在Golang中监听MongoDB集合并提取指定字段,您可以使用MongoDB的Change Streams功能结合Go的mgo.v2库。下面是一个简单的示例代码:
package main
import (
"context"
"fmt"
"log"
"time"
"gopkg.in/mgo.v2"
)
func main() {
session, err := mgo.Dial("mongodb://localhost:27017")
if err != nil {
log.Fatal(err)
}
defer session.Close()
collection := session.DB("your_database").C("your_collection")
pipeline := []bson.M{
bson.M{"$match": bson.M{}},
bson.M{"$project": bson.M{"name": 1}},
}
options := mgo.ChangeStreamOptions{
Pipeline: pipeline,
BatchSize: 1,
FullDocument: "updateLookup",
MaxAwaitTimeMS: time.Duration(500),
}
stream := collection.Watch(context.Background(), mongo.Pipeline{}, options)
defer stream.Close()
for {
// 从change stream读取变更事件
if stream.Next(context.Background()) {
changeEvent := &bson.Raw{}
if err := stream.Decode(changeEvent); err != nil {
log.Println("Failed to decode change event:", err)
continue
}
// 提取所需字段,这里假设'name'字段是字符串类型
nameValue, ok := changeEvent.Lookup("fullDocument.name").StringValue()
if ok {
fmt.Println("Name:", nameValue)
}
} else if err := stream.Err(); err != nil {
log.Println("Error occurred while listening for changes:", err)
break
}
time.Sleep(time.Millisecond * 100) // 避免过于频繁的循环
}
}
请注意,此示例使用了mgo.v2库(https://gopkg.in/mgo.v2),这是一个MongoDB的Go驱动程序。您可以根据自己的项目需求进行调整和扩展。
内容由零声教学AI助手提供,问题来源于学员提问