0

我想对 mongo 集合进行查询,当集合更改时,我想再次运行查询。但是为了优化它,我不想在每次集合更改时运行查询,只有在匹配查询的文档发生更改时才运行查询。我有以下代码:

const query = { author: someUserID };
const fetch = async () => await collection.find(query).toArray();
const watcher = collection
        .watch([{ $match: { fullDocument: query } }])
        .on("change", () => fetch().then(sendData)); // This does not work
fetch().then(sendData); // This works

在第一次运行时,它会获取文档并执行sendData,但是当插入新文档时,不会触发该事件。当我在collection.watch()没有争论的情况下获胜时,它会起作用。

问题出在哪里?谢谢。

编辑:我希望能够重用queryfor.find()和 for .watch()

4

1 回答 1

1

$match示例中的阶段本质上是

{$match: { fullDocument: { author: someUserId }}}

只有fullDocument完全{ author: someUserId }没有其他字段或值时才会匹配。

为了在允许文档中的其他字段的同时匹配作者,请使用点表示法,例如

const query = { "fullDocument.author": someUserId };

并匹配:

{$match: query }
于 2020-09-16T00:59:29.323 回答