问题描述
目的是在 elasticsearch 上同步某些集合中的字段。随着 mongodb 的每一次变化,这也应该在 elasticsearch 上实现。我见过不同的包裹。例如河。不幸的是,它对我不起作用,所以我尝试没有它。这是变更流的正确方法吗?
你怎么能更漂亮地解决这个问题?数据必须与 Elasticsearch 上的每次更改(插入、更新、删除)同步。对于多个集合,但每个集合都不同(每个集合仅某些字段)。不幸的是,我没有解决这个问题的经验,如果添加或删除集合或字段,则不会花费太多精力
const res = await client.connect();
const changeStream = res.watch();
changeStream.on('change',(data) => {
// check the change (is the chance in the right database / collection)
// parse
// push it to elastic server
});
我希望你能帮助我,在此先感谢:)
解决方法
是的。它会起作用,但您必须处理以下情况
-
当您的节点 js 进程停止而 mongodb 更新正在进行时。
您可以使用恢复令牌并跟踪该令牌,因此一旦您 进程出现它可以从那里恢复。
-
在每次更改时插入单个文档。
这对于elasticsearch来说会不堪重负,并且可能会导致插入缓慢,这 最终会导致 mongo 和 elastic 之间的同步延迟。所以最好收集 更改流中的多个文档并使用批量 API 操作插入。