是什么
Meteor.Collection 和
Meteor.Collection.Cursor?
这两者之间有什么关系?确实:
new Meteor.Collection("name") 创建一个具有参数名称的MONGODB集合?
发布于 2014-02-22 10:25:56
新的Meteor.Collection(“名称”)是否用参数名创建了MONGODB集合?
不完全同意。Meteor.Collection表示可能存在或可能不存在的MongoDB集合,但在插入文档之前实际上并不创建实际的MongoDB集合。
Meteor.Collection.Cursor是一个反应性数据源,它表示存在于MongoDB集合中的文档的一个不断变化的子集。此文档子集由传递给selector方法的options参数和Meteor.Collection.find(selector, options)参数指定。此find()方法返回游标对象。我认为流星博士很好地解释了游标:
find返回一个游标。它不会立即访问数据库或返回文档。游标提供fetch以返回所有匹配的文档,map和forEach迭代所有匹配的文档,并在匹配文档集更改时观察和observeChanges以注册回调。 集合游标不是查询快照。如果数据库在调用Collection.find和获取游标的结果之间发生了变化,或者在从游标中获取结果时,这些更改可能出现在结果集中,也可能不会出现。 游标是一个反应性数据源。当您第一次使用fetch、map或forEach检索游标的文档时(例如模板或自动运行),Meteor将注册对底层数据的依赖关系。对集合的任何更改,如果更改了光标中的文档,都会触发重新计算。若要禁用此行为,请将{反应性: false}作为要查找的选项传递。
游标的反应性很重要。如果我有一个游标对象,我可以通过调用它上的fetch()来检索它表示的当前文档集。如果数据在调用之间发生变化,fetch()方法实际上将返回一个不同的文档数组。“流星”中的许多东西自然地理解了游标的反应性。这就是为什么我们可以从模板助手函数返回一个游标对象:
Template.foo.documents = function() {
return MyCollection.find(); // returns a cursor object, rather than an array of documents
};在幕后,Meteor的模板系统知道如何在这个游标对象上调用fetch()。当服务器发送客户端更新告诉它集合已更改时,游标将被告知此更改,这将导致重新计算模板助手,从而导致模板被重新命名。
发布于 2014-02-22 10:24:07
Meteor.Collection是这样定义的对象:
var collection = new Meteor.Collection("collection");然后,这个对象允许您将数据存储在mongo数据库中。注意,仅仅以这种方式定义集合,不会在mongo数据库中创建集合。集合将在您插入文档后创建。
因此,在您将文档插入到之前,您将使用而不是拥有一个名为name的集合。
游标是.find()操作的结果:
var cursor = collection.find()您可能有1000 s的文档,游标允许您一个接一个地浏览它们,而不必将它们全部加载到服务器的RAM中。
然后,您可以使用forEach循环,或者使用docs:游标中指定的其他一些操作。
游标也是客户端上的一个反应性数据源,因此如果数据更改,可以使用相同的查询来更新DOM。
正如Neil提到的,它也值得知道Mongo是一个NoSQL数据库。这意味着您不必真正创建表/集合。您只需像上面那样定义一个集合,然后将一个文档插入其中。这样,如果集合不存在,就会创建它。如果它已经存在,它将被插入到该集合中。
浏览本地数据库
在发布应用程序之前,您不需要真正关注MongoDB,只需使用Meteor就可以与其进行交互。如果您想看看它是什么样子的话:
如果你想看看你的Mongo数据库。当流星运行时,在同一个目录中使用meteor mongo来打开mongo,或者使用像罗博蒙戈 (Gui工具)这样的工具连接到端口3002上的本地主机,以查看您的mongo数据库是什么样子。
https://stackoverflow.com/questions/21952898
复制相似问题