我已经使用Express.js,Mongoose和MongoDB创建了一个JSON API。目前,API的客户无法检查集合中的数据是否已更改 - 他们需要定期下载整个集合。
如何在不下载集合本身的情况下允许API的客户端检查集合的更改(插入,更新,删除)?
有没有办法获取集合的版本号,最后一个更改时间戳或Mongoose集合的哈希?这个问题的最佳实践解决方案是什么?
答案 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"
}