Metero集合

集合:

它是meteor的核心,服务器端和客户端的自动数据同步。

集合是一个特殊的数据结构,它会将 数据存到mongodb中,在浏览器会有一个链接还进行实时同步。

它可不是通过ajax请求,而是用的websocket长链接来做的。

我们创建的集合需要在客户端和服务器端执行。

可以在lib内创建一个collection文件夹,它会在两端运行。

创建一个posts.js文件:

posts=new Mongo.Collection('posts');

创建时不需要用var 来创建变量来存储,因为var会限制对象的作用域在文件内。

我们想要在整个应用中访问就不需要var。

不在client 和server中的文件代码都会在两端运行,所以集合当然会在两端运行。

但是在环境下所起的作用有很大不同。

在服务器端它会和mongodb数据库联络。读取数据变化。

在客户端它是一个安全拷贝的数据子集,它会实时的更新本地数据。

我们可以以运行meteor mongo来启用命令
来操作数据,这是服务器端。

如果数据库在部署上,可以用:

meteor mongo myApp进行mongo shell

db.posts.insert({});

浏览器我们可以在console里,通过posts来获取数据

posts.find().count()

MiniMongo:

客户端的mongo实现被称为MiniMongo,它目前并不是完整的,有些mongo功能是无法实现的。

客户端-服务器通过:

现在就可以实时数据了。

在服务端添加一条数据,会映射到所有链接的本地。

我们可以通过meteor reset来重置数据库,会删除所所集合数据。

在server里可以创建js,

通过posts来获取数据,并且修改。

if(post.find().count()===0){

posts.insert({})

}

本地的postlist.js里也可访问posts。并返回数据到模板。

查找与提取。

在meteor中find()返回的是一个游标。而不是直接的数据。它是一种从数据源。

如果想使用可以fetch()把它转换成数组 。
发布与订阅:

现在我们一直用着autopublish这个包,它在创建项目时默认存在的。

它用来为我演示实时数据的实现。

它只是简单的把整个集合分享给所有链接的客户端。

实际开发中我们肯定不会这样的,一下把几百万的数据都缓存....

所以我们需要自己来编写.

meteor remove autopublish

当删除了包时,页面上数据也显示不出来了。

这是因为我一直用此包来实现实时数据的。

我们需要在服务端编写发布,来返回指定条件下的集合.

在server下创建publications.js

//发布集合 //定义发布名称 回返一个集合find //这里的发布是在server上运行的。 //客户端js需要订阅这个发布来获取数据。

Meteor.publish('posts',function(){

return post.find({status:0});//返回状态为0的数据。

});

//返回指定作者的集合 //通过给函数指定参数,用find来查找指定条件的数据。 //订阅时传递参数来返回指定条件的数据 Meteor.publish('postsAuthor',function(author){
    return posts.find({status:0,author:author},{fields:{status:false}});
});

客户端订阅:

在client下的js里创建main.js

Meteor.subscribe('posts');//订阅

//订阅有条件的发布 //传递参数查找条件的数据 //这样本地的posts返回的就是查找的数据
Meteor.subscribe('postsAthor','star')


发布时函数可以有参数,来实现条件发布。

订阅时传递值。

------------------------------------------------

总结:

集合在两端都需要创建的,需放在Lib里

发布和订阅,分别创建在两端。

服务器发布返回一个find() 可以指定返回属性和条件

本地订阅放在main.js里在运行最后执行。

发布和订阅用来建立两端链接,实现实时数据通信。

这样模板js里就可使用posts.find()来绑定数据了。




你可能感兴趣的:(Metero集合)