关注 MongoDB 变更流

2024-02-22

我们希望我们的 Go 应用程序能够侦听集合上的数据更改。因此,在谷歌搜索解决方案时,我们遇到了 MongoDB改变流 https://docs.mongodb.com/v3.6/changeStreams/。该链接还展示了 Python、Java、Nodejs 等多种语言的一些实现片段。但是,没有 Go 的代码片段。

我们正在使用Mgo https://godoc.org/labix.org/v2/mgo作为司机但找不到明确的声明改变流.

有谁知道如何使用 Mgo 或任何其他 Go 的 Mongo 驱动程序观看 Change Streams?


流行的mgo司机 (github.com/go-mgo/mgo https://github.com/go-mgo/mgo)由古斯塔沃·尼迈耶(Gustavo Niemeyer)开发的已停止使用(无人维护)。而且它不支持变更流。

社区支持分叉github.com/globalsign/mgo https://github.com/globalsign/mgo状况要好得多,并且已经添加了对变更流的支持(请参阅详细信息在这里 https://github.com/globalsign/mgo/pull/97).

要观察集合的变化,只需使用Collection.Watch() https://godoc.org/github.com/globalsign/mgo#Collection.Watch返回值的方法mgo.ChangeStream https://godoc.org/github.com/globalsign/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
}

另请注意,有一个officialMongoDB Go 驱动程序正在开发中,在这里宣布:考虑引入官方 MongoDB Go 驱动程序对社区的影响 https://engineering.mongodb.com/post/considering-the-community-effects-of-introducing-an-official-golang-mongodb-driver

目前它处于α (!!)阶段,所以要考虑到这一点。它可以在这里找到:github.com/mongodb/mongo-go-driver https://github.com/mongodb/mongo-go-driver。它还已经支持变更流,类似地通过Collection.Watch() https://godoc.org/github.com/mongodb/mongo-go-driver/mongo#Collection.Watch方法(这是一个不同的mongo.Collection类型,与mgo.Collection)。它返回一个mongo.Cursor https://godoc.org/github.com/mongodb/mongo-go-driver/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)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关注 MongoDB 变更流 的相关文章

  • Mongoose 限制/偏移量和计数查询

    查询性能有点奇怪 我需要运行一个查询来计算文档总数 并且还可以返回一个可以限制和偏移的结果集 所以 我总共有 57 个文档 用户想要 10 个文档偏移 20 我可以想到两种方法来做到这一点 首先是查询所有 57 个文档 以数组形式返回 然后
  • Exchange 上公用文件夹上的 ItemAdd 事件

    我在将事件处理程序附加到ItemAdd公共文件夹的事件 问题是事件处理程序在几次后停止被调用 成功调用 代码很简单 我有一个ThisAddIn类创建一个对象 该对象又将一个函数附加到ItemAdd其构造函数中的事件 该函数只是弹出一个消息框
  • 为什么结构中“[0]byte”的位置很重要?

    0 byte在golang中不应该占用任何内存空间 但这两个结构体的大小不同 type bar2 struct A int 0 byte type bar3 struct 0 byte A int 那么为什么这个位置 0 byte这里重要吗
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 在 MongoDB 中,如何根据嵌入对象中的属性对文档进行排序?

    在我的产品集合中 我可以找到已在 GB 地区发布的所有产品 gt db products find release region GB pretty id foo release region GB date ISODate 2012 03
  • for 循环初始值设定项中的结构

    知道为什么 for 循环初始值设定项中的这个结构表达式在编译时会出现语法错误吗 在这种情况下 指向结构的指针工作正常 但 ofc 我需要如下所示的局部变量 感谢您的建议 type Request struct id int line byt
  • MongoDB $orderby 和 Sort 之间的区别

    我想获取最新的文档 这显然是一个文档 因此findOne应该可以正常工作 但findOne这里返回插入的第一个文档 所以我现在有两个选择要么使用 orderBy with findOne or use sort 功能与 limit in f
  • mongo objectid“包含”查询

    我想查询 MongoDB 数据库中的集合以查找包含部分 ObjectID 的所有记录 对于普通字符串 我可以使用如下正则表达式 db teams find some string 51eed 但是我该如何对 ObjectID 执行类似的操作
  • 展平嵌套结构会导致切片的切片

    所以我有一个像这样的结构 type Bus struct Number string Name string DirectStations Station Station is another struct ReverseStations
  • 我怎么知道我的所有 goroutine 确实正在使用 golang 的同步包等待一个条件

    我有一个应用程序 我正在创建多个 goroutine 来同时执行某个任务 所有工作协程都会等待条件 事件发生 一旦事件被触发 它们就会开始执行 创建完所有goroutines后 主线程在发送广播信号之前应该知道所有goroutines确实处
  • Mongo按动态字段排序

    所以我传入了一个动态变量 它是我想要排序的字段的名称 假设下面的 sortVariable 可能等于 price createdAt name 等 这不起作用 我该怎么做 function findStuff sortVariable va
  • Golang GAE - 小胡子结构中的 intID

    这是一个Example https www dropbox com sh ur2ws1jnik6euef PjVJSwDTUc Blog Golang zip该应用程序的 关键代码在 golang code handler handler
  • 如何使用 PyMongo 在重复键错误后继续插入

    如果我需要在 MongoDB 中插入尚不存在的文档 db stock update one document set document upsert True 将完成这项工作 如果我错了 请随时纠正我 但是 如果我有一个文档列表并想将它们全
  • 在单个 mongodb 查询中查找并计数

    我的文档看起来像这样 id ObjectId 572c4bffd073dd581edae045 name What s New in PHP 7 description PHP 7 is the first new major versio
  • 在 mongodb 和 nodejs 中对博客和评级进行建模

    我有一个博客集合 其中包含用户给予的标题 正文和综合评分 另一个集合 评级 其架构引用了博客 以对象 ID 的形式对博客进行评级 如果有的话 的用户以及他们给出的评级 即 1 或 1 当特定用户按照 最新优先 的顺序浏览博客时 比如每页 4
  • 获取mongodb中单个查询的最小值和最大值

    考虑 Words 中的以下文档 id 1 usages 2 word Name id 2 usages 1 word Street id 3 usages 1 word House id 4 usages 3 word Table id 5
  • ReferenceError:MongoDB shell 中未定义 require

    我尝试通过 Windows 命令 Windows 8 1 从 Mongo 客户端连接 MongoDB 当我使用require 在 javascript 中 我遇到如下错误 有人有同样的问题吗 我有错过任何一个吗require有关的npm安装
  • 在 Nodejs 中,如何停止 FOR 循环直到 MongoDB 调用返回

    我正在研究下面的代码片段 我有一个名为 stuObjList 的 JSON 对象数组 我想循环遍历数组以查找具有特定标志集的特定 JSON 对象 然后进行数据库调用以检索更多数据 当然 FOR 循环不会等待数据库调用返回并到达 j leng
  • Java/MongoDB 按日期查询

    我将一个值作为 java util Date 存储在我的集合中 但是当我查询以获取两个特定日期之间的值时 我最终得到的值超出了范围 这是我的代码 插入 BasicDBObject object new BasicDBObject objec
  • 如何将 SQLite 数据库捆绑到 Go 二进制文件中?

    我尝试使用 go bindata 和 packr 但这些包没有显示如何将 SQLite 数据库文件打包到二进制文件中 我不需要以任何方式更新数据库 我只想在启动时从中读取数据 如何将 SQLite 数据库文件嵌入到 Go 二进制文件中 SQ

随机推荐

  • MongoDB 的插入安全模式有多安全?

    我正在开发一个项目 其中包含一些重要数据 这意味着如果灯或服务器出现故障 我们不会丢失任何数据 我们使用 MongoDB 作为数据库 我想确保插入后我的数据位于数据库中 如果未插入一个元素 则回滚整个批次 我知道 Mongo 背后的理念是我
  • 在 JCuda 中加载多个模块不起作用

    在jCuda中 可以将cuda文件加载为PTX或CUBIN格式并调用 启动 global 来自 Java 的函数 内核 考虑到这一点 我想使用 JCuda 开发一个框架来获取用户的 device 函数在一个 cu文件在运行时加载并运行它 我
  • log4j2.properties 文件的更改导致 elasticsearch 失败

    我已经安装了elasticsearch 6 6 0 和CentOS 7 我想添加一些用于旋转日志的属性 例如大小为50MB的旋转和压缩 但是 如果我向 etc elasticsearch log4j2 properties 文件添加更多配置
  • LINQ 分组依据表达式语法

    我有一个与此类似的 T SQL 查询 SELECT r id r name count FROM RoomBindings GROUP BY r id r name 我想使用 LINQ 做同样的事情 到目前为止我到达这里 var rooms
  • 链接错误“未定义引用‘__gxx_personality_v0’”和g++[重复]

    这个问题在这里已经有答案了 可能的重复 链接上未定义符号 gxx personality v0 https stackoverflow com questions 203548 undefined symbol gxx personalit
  • 带有母版页的 ASP.Net Web 表单中的 JQuery

    我有一个名为 CoursesPage aspx 的页面 它有一个母版页 在 CoursesPage aspx 中 我在课程名称上使用自动完成 jquery 以便更好地搜索 这是我的脚本代码
  • 如何从命令行启动的 GUI 应用程序写入 StdOut?

    我正在 Delphi 7 中编写一个标准的 Windows 应用程序 如果我正在编写控制台应用程序 我可以调用以下命令来输出到命令行或输出文件 writeln Some info 如果我从从命令行启动的标准 GUI 应用程序执行此操作 则会
  • Rails send_file 不播放 mp4

    我有一个 Rails 应用程序 可以保护上传的视频 将它们放入私人文件夹中 现在我需要播放这些视频 当我在控制器中执行以下操作时 def show video Video find params id send file video ful
  • 使用 Json 比较 C# 对象

    我想比较两个对象而不实现 Equals 方法 以这种方式比较它们的缺点是什么 1 用Json序列化它们 2 结果对比 thanks 以这种方式比较它们有什么缺点 失去速度 将对象转换为 JSON 字符串然后比较它们比通过属性等于属性要慢得多
  • SUM() 基于与 SELECT 不同的条件

    您好 有没有一种方法可以根据与 SELECT 语句其余部分不同的条件进行 SUM total points 计算 所以我想要为 非常感谢您的帮助 SELECT members member id members teamname SUM t
  • 没有这样的桶:/usr/local/Cellar/git

    我已经为此苦苦挣扎了几个小时 我在 Mac 上使用 Yosemite 我安装了自制软件 并且使用 git 就很好 我尝试做 git add i我得到了这个错误 无法在 INC 中找到 Git pm INC 包含 所以我按照这里的说明进行操作
  • E:软件包“libssl1.1”没有安装候选者

    sudo apt get install libssl1 1 正在阅读包裹清单 完成 构建依赖树 完成 读取状态信息 完成 软件包 libssl1 1 不可用 但被另一个软件包引用 这可能意味着该包丢失 已过时或 只能从其他来源获得 E 软
  • 回收和赋值函数(`split<-`)

    有人可以解释一下这一行 R 代码是如何工作的吗 split dat f lt lapply split dat f max 我以为这只是一个回收规则 但实际上我无法理解 数据示例 dat lt c 1 2 3 100 200 300 f l
  • 将 pyodbc 连接到 Postgres

    尝试使用 pyodbc 连接到 Postgres 我可以使用 isql 连接到数据库 echo select 1 isql v my connector Returns Connected sql statement help tablen
  • 如果 URL 包含单词则隐藏 div

    如果页面的 url 包含某个单词 我需要隐藏一个 div 感谢这个网站 我已经能够成功地找到该网址是否包含该单词 这段代码的工作原理 但由于某种原因 隐藏 div 不起作用 如下所示 div div
  • 如何将 SVG 转换为 png 或 jpg

    我尝试过使用batik 但我得到的是空 png 文件 我还包含了所有必需的罐子 我的代码是 import org apache batik transcoder image PNGTranscoder import org apache b
  • 在 ChartJS 中对标签进行换行时,工具提示中出现不需要的逗号

    我有一些标签很长的图 我使用在此站点中找到的答案将标签换成新行 这是我的标签的示例 labels Utensilios para escrita e artes Faz de conta Jogos Materiais n o estrut
  • Swift 结构到 NSData 并返回

    我有一个包含一个结构体和一个结构体的结构体NSObject我想序列化为NSData object struct Packet var name String var index Int var numberOfPackets Int var
  • 如何在通用标头中 typedef 实现定义的结构?

    我有一个 C 项目 旨在可移植到各种 PC 和嵌入式 平台 应用程序代码将使用具有特定于平台的实现的各种调用 但共享通用 通用 API 以帮助实现可移植性 我正在尝试确定声明函数原型和结构的最合适方法 到目前为止 这是我想到的 main c
  • 关注 MongoDB 变更流

    我们希望我们的 Go 应用程序能够侦听集合上的数据更改 因此 在谷歌搜索解决方案时 我们遇到了 MongoDB改变流 https docs mongodb com v3 6 changeStreams 该链接还展示了 Python Java