如何检查集合是否已更改?

时间:2017-11-05 12:49:37

标签: mongodb express mongoose

我已经使用Express.js,Mongoose和MongoDB创建了一个JSON API。目前,API的客户无法检查集合中的数据是否已更改 - 他们需要定期下载整个集合。

如何在不下载集合本身的情况下允许API的客户端检查集合的更改(插入,更新,删除)?

有没有办法获取集合的版本号,最后一个更改时间戳或Mongoose集合的哈希?这个问题的最佳实践解决方案是什么?

1 个答案:

答案 0 :(得分:4)

在MongoDB的当前版本和早期版本中,您必须在应用程序端执行此操作,可能使用轮询。

MongoDB 3.6有一个名为change stream的全新功能,可让您实时收听集合中发生的变化。

用于收听您的收藏中发生的所选更改的示例代码如下:

var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
MongoClient.connect("mongodb://172.16.0.110:27017/myproject?readConcern=majority").then(function(client){
  var db = client.db('myproject')
  var changeStreams =  db.collection('documents').watch()
  changeStreams.on('change', function(change){
    console.log(change)  
  })

})

如果您使用的是node.js,则需要使用以下节点模块才能使其正常工作:

"dependencies": {
    "mongodb": "mongodb/node-mongodb-native#3.0.0"
  }