2017-07-18 36 views
1

我有一個graphQl模式定義,每當在MongoDB集合中添加一個新字段時,都需要更改運行時。例如,一個集合只有兩個字段之前如何在將新字段添加到mongodb集合時收到通知?

person { 
      "age" : "54" 
      "name" : "Tony" 
      } 

然後添加一個新字段「height」。

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

      } 

我需要更改我的graphql架構並添加高度。那麼我如何從Mongodb獲取警報或通知?

回答

0

MongoDB本身不會實現事件消息傳遞。您本身不能獲得關於數據庫,館藏或文檔更新的信息。

但是,MongoDB集成了一個'operation log'功能,該功能允許您訪問集合上每個寫入操作的日誌日誌。

日誌日誌用於MongoDB副本,即羣集同步功能。爲了激活oplogs,您需要至少有兩個MongoDB實例,一個主服務器和一個a replicate

操作日誌基於capped collection功能構建,該功能允許通過只追加機制構建集合,這可確保快速寫入和尾隨遊標。作者說:

oplog內部存在一個封頂的集合,所以你不能在正常操作過程中修改它的大小 。

MongoDB - Change the Size of the Oplog

和:

封頂集合是支持 是插入和檢索基於 插入順序文件的高通量操作固定大小的集合。 Capped集合的工作方式與循環 緩衝區類似:一旦集合填滿其分配的空間,它將通過覆蓋 集合中最早的文檔爲新文檔創建空間 。

MongoDB - Capped Collections

操作日誌軸頸內的文件的模式是這樣的:

"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是可怕的保證在高sollicited集羣文件跟蹤的原因,以及爲什麼如Apache Kafka的信息解決方案來作爲補充事件跟蹤的原因(例如:事件document update

要回答你的問題:在一個合理的請求環境中,你可能想看看Javascript Meteor project,它允許你基於查詢結果的變化觸發事件,並依賴於MongoDB的oplog特性。

現金oplogs例子從The MongoDB Oplog

相關問題