Mongodb Mongoose如何侦听集合更改
我需要构建一个mongo更新程序进程,将mongodb数据下载到本地IoT设备(配置数据等) 我的目标是在固定的时间间隔内(例如1分钟)观察一些mongo集合。如果我更改了收藏(删除、插入或更新),我会将完整的收藏下载到我的设备上。这些收藏的简单记录不会超过几百条,因此下载的数据不会太多Mongodb Mongoose如何侦听集合更改,mongodb,mongoose,Mongodb,Mongoose,我需要构建一个mongo更新程序进程,将mongodb数据下载到本地IoT设备(配置数据等) 我的目标是在固定的时间间隔内(例如1分钟)观察一些mongo集合。如果我更改了收藏(删除、插入或更新),我会将完整的收藏下载到我的设备上。这些收藏的简单记录不会超过几百条,因此下载的数据不会太多 是否有任何机制可以发现自上一个池以来集合已更改?在这种情况下应该使用哪些mongo功能?我认为最好的解决方案是使用更新后中间件 你可以在这里了解更多 我对自动工作的嵌入式系统也有同样的要求,而且总是需要在不重新
是否有任何机制可以发现自上一个池以来集合已更改?在这种情况下应该使用哪些mongo功能?我认为最好的解决方案是使用更新后中间件 你可以在这里了解更多
我对自动工作的嵌入式系统也有同样的要求,而且总是需要在不重新启动系统的情况下自动调整操作参数 为此,我创建了一个configuration manager类,并在其构造函数中编写了一个“参数监视器”,它只检查数据库中标记的参数,当然,如果需要监视新配置,我会在代码的另一部分通知config-manager重新加载这样的更新 正如您所看到的,这个过程非常简单,当然可以进行改进,以避免配置管理器因许多更新而过载,并防止它们在很短的时间间隔内重叠 因为有很多设置需要读取,所以在连接并打开数据库后,我会立即打开一个游标进行查询。当数据流向我发送新数据时,我为其创建了一个新的数据库,以便可以根据Config manager的类型和内部详细信息对其进行操作。然后我检查是否需要监视属性,如果需要,我调用我创建的名为watch的内部函数来处理这个问题,它查询同名的子项目,以查看通过更新在数据库中进行检查所需的默认时间,从而为该任务注册超时,每次检查都会根据更新的时间重新创建超时,或者在watch不再存在时中断更新
this.connection.once('open', () => {
let cursor = Config.find({}).cursor();
cursor.on('data', (doc) => {
this.config[doc.parametro] = criarProxy(doc.parametro, doc.valor);
if (doc.watch) {
console.log(sprintf("Preparando para Monitorar %s", doc.parametro));
function watch(configManager, doc) {
console.log("Monitorando parametro: %s", doc.parametro);
if (doc.watch) setTimeout(() => {
Config.findOne({
parametro: doc.parametro
}).then((doc) => {
console.dir(doc);
if (doc) {
if (doc.valor != configManager.config[doc.parametro]) {
console.log("Parametro monitorado: %(parametro)s, foi alterado!", doc);
configManager.config[doc.parametro] = criarProxy(doc.parametro, doc.valor);
} else
console.log("Parametro monitorado %{parametro}s, não foi alterado", doc);
watch(configManager, doc);
} else
console.log("Verifique o parametro: %s")
})
},
doc.watch)
}
watch(this, doc);
}
});
cursor.on('close', () => {
if (process.env.DEBUG_DETAIL > 2) console.log("ConfigManager closed cursor data");
resolv();
});
cursor.on('end', () => {
if (process.env.DEBUG_DETAIL > 2) console.log("ConfigManager end data");
});
正如您所看到的,代码可以改进很多,如果您想根据您的环境或泛型给出改进建议,请使用要点:要侦听对MongoDB集合的更改,请设置Mongoose
模型。观看
const PersonModel=require(“./models/person”)
const personEventEmitter=PersonModel.watch()
personEventMitter.on('change',change=>console.log(JSON.stringify(change)))
const person=new PersonModel({name:'Thabo'})
person.save()
//触发更改流上的控制台日志
//{u id:'…',operationType:'插入',…}
注意:此功能仅在MongoDB复制集上可用
有关更多信息,请参阅:
如果要侦听对数据库的更改,请使用连接。观看
查看更多信息
这些函数从v3.6开始监听,您到目前为止尝试了哪些功能?我们不能帮你做这么普通的事。谢谢。我已经找了好几天了。。。。。。!