mongodb - 监视 MongoDB 更改流

标签 mongodb go event-handling mgo mongo-go

我们希望我们的 Go 应用程序监听集合上的数据更改。因此,通过谷歌搜索解决方案,我们遇到了 MongoDB 的 Change Streams。 .该链接还展示了一系列语言(如 Python、Java、Nodejs 等)的一些实现片段。然而,没有 Go 的代码片段。

我们正在使用 Mgo作为驱动程序,但找不到关于更改流的明确声明。

有没有人知道如何使用 Mgo 或任何其他适用于 Go 的 Mongo 驱动程序在 Change Streams 上观看?

最佳答案

由 Gustavo Niemeyer 开发的流行 mgo 驱动程序 ( github.com/go-mgo/mgo ) 已经消失(无人维护)。而且它不支持更改流。

社区支持的分支github.com/globalsign/mgo状态要好得多,并且已经添加了对变更流的支持(请参阅 details here)。

要查看集合的更改,只需使用 Collection.Watch()返回值 mgo.ChangeStream 的方法.这是一个使用它的简单示例:

coll := ... // Obtain collection

pipeline := []bson.M{}

changeStream := coll.Watch(pipeline, mgo.ChangeStreamOptions{})
var changeDoc bson.M
for changeStream.Next(&changeDoc) {
    fmt.Printf("Change: %v\n", changeDoc)
}

if err := changeStream.Close(); err != nil {
    return err
}

另请注意,有一个官方 MongoDB Go 驱动程序正在开发中,已在此处公布:Considering the Community Effects of Introducing an Official MongoDB Go Driver

它目前处于 alpha (!!) 阶段,因此请考虑到这一点。可在此处获得:github.com/mongodb/mongo-go-driver .它还已经支持变更流,类似地通过 Collection.Watch()方法(这是一个不同的 mongo.Collection 类型,它与 mgo.Collection 无关)。它返回 mongo.Cursor你可以这样使用:

var coll mongo.Collection = ... // Obtain collection

ctx := context.Background()

var pipeline interface{} // set up pipeline

cur, err := coll.Watch(ctx, pipeline)
if err != nil {
    // Handle err
    return
}
defer cur.Close(ctx)

for cur.Next(ctx) {
    elem := bson.NewDocument()
    if err := cur.Decode(elem); err != nil {
        log.Fatal(err)
    }

    // do something with elem....
}

if err := cur.Err(); err != nil {
    log.Fatal(err)
}

关于mongodb - 监视 MongoDB 更改流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49151104/

相关文章:

google-app-engine - 如何使用go语言在google app engine中按键获取实体

mongodb - 如何使用golang获取mongodb中数组中的最后一个元素?

javascript - Javascript 框架的自定义事件日志记录

JavaScript 键盘事件和检测

c# - 进行隧道事件的正确方法

MongoDb 聚合框架对内部数组的元素进行分组

spring - REST 排序以负 ('-' ) 符号降序,而不是 <propertyName>.dir=desc

go - 无法使用来自本地运行的 Kafka 服务器的消息,使用 Golang Sarama 包

mongodb - 在 mongodb-go-driver 中,如何将 BSON 编码/解码到结构中

javascript - MongoDb:在父级保存中查找插入的子级的生成 ID