要查询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()
方法时实际发生了什么。我无法找到任何有关此问题的文档。
答案 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)
要记住find
和fetch
之间还有一个基本的区别:fetch
会导致整个游标数据的深层复制操作。吃CPU和内存。
因此:如果您不需要,请不要使用fetch
!您只需要将数据传递给第三方库(例如d3
),这些库不理解游标是什么并且需要本机JS数组。