Collections是什么
Collections
是Meteor存儲數(shù)據(jù)的方式亚兄,數(shù)據(jù)庫使用的是MongoDB
。
Collections
允許訪問客戶端和服務(wù)端,會自動更新池户,當(dāng)Collections
發(fā)生改變的時(shí)候离例,所有使用Collections
的組件都會被更新换团。使用Collections
不需要編寫大量的服務(wù)器代碼就可以方便的更新頁面邏輯。
客戶端調(diào)用Collections
和服務(wù)器調(diào)用Collections
基本一致宫蛆。
Collections
使用MongoDB實(shí)現(xiàn),每一個(gè)Collections
對應(yīng)MongoDB中的一個(gè)表艘包。
創(chuàng)建一個(gè)Collections
創(chuàng)建Collections
很簡單,直接new一個(gè)Colletcion即可:
Languages=new Mongo.Collection('languages');
這樣就可以使用find()
查詢數(shù)據(jù)了,使用Collections
查詢數(shù)據(jù)的客戶端代碼:
if (Meteor.isClient) {
Template.meteor_collection.helpers({
languages:Languages.find()
});
}
在模板中顯示查詢到的數(shù)據(jù):
<template name="meteor_collection">
{{#each languages}}
<h3>{{name}}</h3>
{{/each}}
</template>
因?yàn)檫€沒有插入數(shù)據(jù)的猛,所以這個(gè)使用頁面中并沒有數(shù)據(jù)可以顯示,下面插入一些數(shù)據(jù)想虎。
使用MongoDB插入數(shù)據(jù)
進(jìn)入項(xiàng)目目錄中卦尊,確保你的MongoDB
服務(wù)在運(yùn)行中,如果沒有運(yùn)行舌厨,可以啟動Mongo服務(wù)岂却,也可以啟動項(xiàng)目,啟動項(xiàng)目時(shí)會自動啟動MongoDB
服務(wù)。
然后運(yùn)行命令:
meteor mongo
ongoDB shell version: 2.6.7
connecting to: 127.0.0.1:3001/meteor
meteor:PRIMARY>
show tables;
并沒有看到數(shù)據(jù)顯示裙椭,下面插入一條數(shù)據(jù):
db.languages.insert({name:'nodejs',created_time:new Date()})
再來看下:
show tables;
languages
system.indexes
多了兩個(gè)表 一個(gè)是languages
一個(gè)是索引表
躏哩。
在頁面里面就可以看到一條數(shù)據(jù)。
在server端添加數(shù)據(jù)
上面的查詢是在客戶端使用Collections
,下面演示下在服務(wù)器端使用Collections
的方法揉燃,在Meteor啟動的時(shí)候判斷如果數(shù)據(jù)小于2條就新加一條數(shù)據(jù)扫尺。
if (Meteor.isServer) {
Meteor.startup(function () {
if(Languages.find().count()==1){
Languages.insert({name:"css",created_time:new Date()});
}
});
}
這樣就在服務(wù)器端添加了一條數(shù)據(jù),直接就可以在客戶端查看到數(shù)據(jù)變化你雌。
Meteor
的Collections
的特點(diǎn):在客戶端和服務(wù)端使用相同的數(shù)據(jù)模型器联,一次定義之后兩端使用,Meteor
會完成剩下的數(shù)據(jù)同步的工作婿崭。
項(xiàng)目地址:https://github.com/jjz/meteor/tree/master/meteor-collection