【问题标题】:Meteor.Collection and Meteor.Collection.CursorMeteor.Collection 和 Meteor.Collection.Cursor
【发布时间】:2014-03-24 01:23:08
【问题描述】:

什么是

Meteor.Collection 

Meteor.Collection.Cursor

这两者是如何相互关联的?做到了:

new Meteor.Collection("name") 

使用参数名称创建MONGODB 集合?

【问题讨论】:

  • 我刚刚看到这个问题的两个编辑完全破坏了意图。任何审阅者都应检查编辑历史记录。

标签: mongodb meteor


【解决方案1】:

new Meteor.Collection("name") 是否创建了一个带有参数名称的 MONGODB 集合?

不完全是。 Meteor.Collection 代表一个可能存在也可能不存在的 MongoDB 集合,但实际的 MongoDB 集合在您插入文档之前并未真正创建。

Meteor.Collection.Cursor 是一个响应式数据源,它表示 MongoDB 集合中存在的文档的变化子集。此文档子集由您传递给Meteor.Collection.find(selector, options) 方法的selectoroptions 参数指定。这个find() 方法返回游标对象。我认为Meteor Docs 很好地解释了游标:

find 返回一个游标。它不会立即访问数据库或返回文档。游标提供 fetch 以返回所有匹配的文档,map 和 forEach 用于迭代所有匹配的文档,并在匹配的文档集发生更改时通过观察和观察更改注册回调。

集合游标不是查询快照。如果数据库在调用 Collection.find 和获取游标结果之间发生变化,或者在从游标中获取结果时发生变化,这些变化可能会出现在结果集中,也可能不会出现。

游标是一种反应式数据源。第一次在响应式计算(例如,模板或自动运行)中使用 fetch、map 或 forEach 检索游标的文档时,Meteor 将注册对基础数据的依赖关系。任何更改游标中文档的集合都会触发重新计算。要禁用此行为,请将 {reactive: false} 作为查找选项传递。

游标的反应性很重要。如果我有一个游标对象,我可以通过在其上调用fetch() 来检索它所代表的当前文档集。如果数据在两次调用之间发生变化,fetch() 方法实际上将返回一个不同的文档数组。 Meteor 中的许多东西本身就理解游标的反应性。这就是为什么我们可以从模板帮助函数返回一个游标对象:

Template.foo.documents = function() {
  return MyCollection.find(); // returns a cursor object, rather than an array of documents
};

在幕后,Meteor 的模板系统知道在这个光标对象上调用fetch()。当服务器向客户端发送更新通知它集合已更改时,游标会收到此更改的通知,这会导致重新计算模板帮助程序,从而导致重新呈现模板。

【讨论】:

    【解决方案2】:

    Meteor.Collection 是一个对象,您可以这样定义:

    var collection = new Meteor.Collection("collection");
    

    然后,此对象可让您将数据存储在 mongo 数据库中。请注意,仅以这种方式定义集合不会在您的 mongo 数据库中创建集合。插入文档后会创建集合。

    因此,在您向其中插入文档之前,您将不会拥有一个名为 name 的集合。

    光标.find()操作的结果:

    var cursor = collection.find()
    

    您可能有 1000 多个文档,光标可让您逐个浏览它们,而无需将它们全部加载到服务器的 RAM 中。

    然后您可以使用forEach 循环,或使用文档中指定的其他一些操作:http://docs.meteor.com/#meteor_collection_cursor

    游标也是客户端的响应式数据源,因此如果数据发生变化,您可以使用相同的查询来更新您的 DOM。

    正如 Neil 所说,知道 Mongo 是一个 NoSQL 数据库也是值得的。这意味着您不必真正创建表/集合。您只需像上面那样定义一个集合,然后向其中插入一个文档。这样,如果集合不存在,就会创建它。如果它已经存在,它将被插入到该集合中。

    浏览本地数据库

    在发布应用程序之前,您实际上并不需要关心 MongoDB,您可以单独使用 Meteor 与它进行交互。如果您想看看它的样子:

    如果你想看看你的 Mongo 数据库。 当流星运行时,在同一目录中使用meteor mongo 来调出一个mongo shell,或者使用robomongo(Gui 工具)之类的工具连接到 localhost 的 3002 端口以进行查看你的 mongo 数据库是什么样子的。

    【讨论】:

    • 可能值得一提的是集合不需要存在等等。并参考文档。这是一个明确的新举措。
    • @NeilLunn 我在此添加了一些内容。谢谢
    猜你喜欢
    • 2014-04-03
    • 2014-11-03
    • 1970-01-01
    • 2014-04-12
    • 2013-04-06
    • 2013-08-19
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多