如何在mongodb集合中添加新字段时获得通知?

如何在mongodb集合中添加新字段时获得通知?,mongodb,graphql,Mongodb,Graphql,我定义了一个graphQl模式,每当mongodb集合中添加新字段时,需要在运行时更改该模式。例如,集合之前只有两个字段 person { "age" : "54" "name" : "Tony" } 后来又添加了一个新字段“height” person { "age" : "54" "name" : "Tony"

我定义了一个graphQl模式,每当mongodb集合中添加新字段时,需要在运行时更改该模式。例如,集合之前只有两个字段

    person { 
             "age" : "54"
             "name" : "Tony"
           }
后来又添加了一个新字段“height”

        person { 
             "age" : "54"
             "name" : "Tony"
             "height" : "167"

           }

我需要改变我的graphql模式并增加高度。那么,如何从Mongodb获取警报或通知呢?

Mongodb不以本机方式实现事件消息传递。您无法以本机方式获得数据库、集合或文档更新的通知

但是,MongoDB集成了一个功能,允许您访问集合上每个写入操作的日志日志

日志日志用于MongoDB副本,也称为群集同步功能。要激活
oplogs
,您需要至少有两个MongoDB实例,一个主实例和一个主实例

操作日志基于该功能构建,该功能允许在仅附加机制上构建集合,从而确保快速写入和跟踪游标。作者说:

oplog在内部作为封顶集合存在,因此您不能 在正常操作过程中修改其大小

以及:

Capped集合是固定大小的集合,支持 基于以下内容插入和检索文档的高通量操作: 插入顺序。封顶集合的工作方式类似于循环 缓冲区:一旦集合填满分配的空间,它就会腾出空间 通过覆盖中最旧的文档来获取新文档 收藏

操作日志日志中的文档架构如下所示:

"ts" : Timestamp(1395663575, 1),
"h" : NumberLong("-5872498803080442915"),
"v" : 2,
"op" : "i",
"ns" : "wiktory.items",
"o" : {
  "_id" : ObjectId("533022d70d7e2c31d4490d22"),
  "author" : "JRR Hartley",
  "title" : "Flyfishing"
  }
}
例如:
“op”:“i”
表示操作是插入,而
“o”
是插入的对象

同样,可以通知您
update
操作:

"op" : "u",
"ns" : "wiktory.items",
"o2" : {
  "_id" : ObjectId("533022d70d7e2c31d4490d22")
},
"o" : {
  "$set" : {
    "outofprint" : true
  }
}
请注意,操作日志(您作为集合访问它们)在磁盘大小或条目号(FIFO)方面受到限制。这意味着,最终,无论您的oplog使用者比oplog编写器慢多少,您都将丢失操作日志条目,从而导致消耗结果损坏

这就是为什么MongoDB在保证高度Sollicite集群上的文档跟踪方面很糟糕的原因,也是为什么消息传递解决方案(例如:事件
文档更新
)作为事件跟踪的补充提供的原因

回答您的问题:在一个合理要求的环境中,您可能想看看Javascript,它允许您根据查询结果的更改触发事件,并依赖于MongoDB oplog特性


学分:从MongoDb 3.6开始,您可以订阅更改流。您可以订阅“更新”事件操作。详情如下: