如何在mongodb集合中添加新字段时获得通知?
我定义了一个graphQl模式,每当mongodb集合中添加新字段时,需要在运行时更改该模式。例如,集合之前只有两个字段如何在mongodb集合中添加新字段时获得通知?,mongodb,graphql,Mongodb,Graphql,我定义了一个graphQl模式,每当mongodb集合中添加新字段时,需要在运行时更改该模式。例如,集合之前只有两个字段 person { "age" : "54" "name" : "Tony" } 后来又添加了一个新字段“height” person { "age" : "54" "name" : "Tony"
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开始,您可以订阅更改流。您可以订阅“更新”事件操作。详情如下: