Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongoose如何侦听集合更改_Mongodb_Mongoose - Fatal编程技术网

Mongodb Mongoose如何侦听集合更改

Mongodb Mongoose如何侦听集合更改,mongodb,mongoose,Mongodb,Mongoose,我需要构建一个mongo更新程序进程,将mongodb数据下载到本地IoT设备(配置数据等) 我的目标是在固定的时间间隔内(例如1分钟)观察一些mongo集合。如果我更改了收藏(删除、插入或更新),我会将完整的收藏下载到我的设备上。这些收藏的简单记录不会超过几百条,因此下载的数据不会太多 是否有任何机制可以发现自上一个池以来集合已更改?在这种情况下应该使用哪些mongo功能?我认为最好的解决方案是使用更新后中间件 你可以在这里了解更多 我对自动工作的嵌入式系统也有同样的要求,而且总是需要在不重新

我需要构建一个mongo更新程序进程,将mongodb数据下载到本地IoT设备(配置数据等)

我的目标是在固定的时间间隔内(例如1分钟)观察一些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开始监听,您到目前为止尝试了哪些功能?我们不能帮你做这么普通的事。谢谢。我已经找了好几天了。。。。。。!