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

时间:2015-07-13 11:01:48

标签: mongodb meteor fetch 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()方法时实际发生了什么。我无法找到任何有关此问题的文档。

2 个答案:

答案 0 :(得分:4)

  

<强> Collection.find();

它在集合中找到与选择器匹配的文档并返回光标。在Meteor中,find()是同步的,如果数据库中的某些内容发生变化,它将反映在UI上。

Here是有关Collection.find()

的更多详细信息
  

<强> cursor.fetch();

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

Here是有关cursor.fetch()

的更多详细信息
  

使用什么?

如果您需要所有文档并希望对其执行某些操作,那么只有fetch()才有用,否则最好使用光标。

<强>结论

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

答案 1 :(得分:1)

要记住findfetch之间还有一个基本的区别:fetch会导致整个游标数据的深层复制操作。吃CPU和内存。

因此:如果您不需要,请不要使用fetch!您只需要将数据传递给第三方库(例如d3),这些库不理解游标是什么并且需要本机JS数组。