当我在 minimongo 上执行 fetch() 时会发生什么

what happens when I execute fetch() on minimongo

要在 meteors 客户端 mongodb 实现上查询对象,我可以使用

MyModel.find();
// produces a lot of attributes, not useful

MyModel.find().fetch();
// returns array containing my objects from type 'MyModel', e.g.
// [ { _id: "1", title: "some title", url: "some Url"__proto__: Object }, .. ]

如果我不使用 fetch,我会得到很多我不理解的属性,这些属性对我来说似乎没有用。我想知道当我调用 fetch() 方法时到底发生了什么。我找不到与此相关的任何文档。

Collection.find();

它在集合中找到与选择器和 returns 光标匹配的文档。在 Meteor 中,find() 是同步的,如果数据库发生变化,它也会反映在 UI 上。

Here 是关于 Collection.find()

的更多详细信息

cursor.fetch();

fetch() 是从游标中获取数据库中的所有记录。您可以对 find() 返回的游标使用提取。当您使用 fetch() 时,您将获取数组中的所有记录,但不会获取更新,即运行时数据库更改不会反映在执行后返回的数据上。

Here 是关于 cursor.fetch()

的更多详细信息

What to use?

如果您需要所有文件并想对其进行一些操作,那么只有 fetch() 有用,否则,最好使用游标。

结论

使用 Collection.find() 是最好的、可靠的和轻量级的。但最终它是按照你的应用程序逻辑。

请记住 findfetch 之间还有一个更根本的区别:fetch 导致对整个游标数据进行深度复制操作。那会吃 CPU 和内存。

因此:如果不需要,请不要使用 fetch!只有在将数据传递给像 d3 这样不理解什么是游标并且需要原生 JS 数组的第三方库时才需要它。