流星將數(shù)據(jù)存儲(chǔ)在集合中歉糜。 首先,使用新的Mongo.Collection聲明一個(gè)集合望众。
集合的名稱匪补。 如果為null,則創(chuàng)建一個(gè)非托管(未同步)的本地集合烂翰。
將管理此集合的服務(wù)器連接夯缺。 如果未指定,則使用默認(rèn)連接甘耿。 傳遞調(diào)用DDP.connect的返回值來指定一個(gè)不同的服務(wù)器踊兜。 通過null來指定沒有連接。 非托管(名稱為空)集合無法指定連接佳恬。
轉(zhuǎn)換函數(shù)
一個(gè)可選的轉(zhuǎn)換函數(shù)捏境。 文件在從fetch或findOne返回之前,在傳遞給觀察殿怜,映射典蝌,forEach,allow和deny的回調(diào)函數(shù)之前將通過此函數(shù)傳遞头谜。 對(duì)于observeChanges的回調(diào)或從發(fā)布函數(shù)返回的游標(biāo)骏掀,轉(zhuǎn)換不適用。
設(shè)置為false可跳過設(shè)置允許從客戶端代碼插入/更新/刪除的突變方法。 默認(rèn)為true截驮。
調(diào)用這個(gè)函數(shù)類似于在傳統(tǒng)的ORM(Object-Relation Mapper)對(duì)象框架中聲明一個(gè)模型笑陈。 它建立一個(gè)可用于存儲(chǔ)特定類型信息的集合(記錄存儲(chǔ)空間或“文檔”),如用戶葵袭,帖子涵妥,分?jǐn)?shù),待辦事項(xiàng)或任何與您應(yīng)用程序有關(guān)的事物坡锡。 每個(gè)文檔都是一個(gè)EJSON對(duì)象蓬网。 它包含一個(gè)_id屬性,其值在集合中是唯一的鹉勒,當(dāng)您第一次創(chuàng)建文檔時(shí)帆锋,Meteor將設(shè)置它。
該函數(shù)返回一個(gè)對(duì)象禽额,其中包含將文檔插入到集合中的方法锯厢,更新其屬性并將其刪除,并查找符合任意條件的集合中的文檔脯倒。 這些方法的工作方式與流行的Mongo數(shù)據(jù)庫API兼容实辑。 相同的數(shù)據(jù)庫API可以在客戶端和服務(wù)器上工作(見下文)。
如果您在創(chuàng)建集合時(shí)傳遞了一個(gè)名稱藻丢,那么您正在聲明一個(gè)持久集合?-一個(gè)存儲(chǔ)在服務(wù)器上并被所有用戶看到的集合剪撬。 客戶端代碼和服務(wù)器代碼都可以使用相同的API訪問相同的集合。
具體來說悠反,當(dāng)你傳遞一個(gè)名字時(shí)婿奔,會(huì)發(fā)生以下情況:
在服務(wù)器上(如果您不指定連接),將在后端Mongo服務(wù)器上創(chuàng)建具有該名稱的集合问慎。當(dāng)你在服務(wù)器上調(diào)用這個(gè)集合上的方法時(shí),它們直接轉(zhuǎn)換成正常的Mongo操作(在檢查它們符合你的訪問控制規(guī)則之后)挤茄。
在客戶端上(如果指定連接如叼,則在服務(wù)器上),創(chuàng)建一個(gè)Minimongo實(shí)例穷劈。?Minimongo本質(zhì)上是純JavaScript中的內(nèi)存中非持久化的Mongo實(shí)現(xiàn)笼恰。它充當(dāng)本地緩存,僅存儲(chǔ)該客戶端正在使用的數(shù)據(jù)庫的子集歇终。對(duì)這些集合的查詢(查找)直接從這個(gè)緩存中提供社证,而不與服務(wù)器通話。
當(dāng)你寫入到客戶端的數(shù)據(jù)庫(插入评凝,更新追葡,刪除)時(shí),命令立即在本地執(zhí)行,并且同時(shí)發(fā)送到服務(wù)器并在那里執(zhí)行宜肉。這通過存根發(fā)生匀钧,因?yàn)閷懭胧亲鳛榉椒▽?shí)現(xiàn)的。
在服務(wù)器上寫入到與另一臺(tái)服務(wù)器有指定連接的集合時(shí)谬返,它會(huì)將相應(yīng)的方法發(fā)送到另一臺(tái)服務(wù)器之斯,并通過DDP從其接收更改后的值。 與客戶端不同遣铝,它不首先在本地執(zhí)行寫入佑刷。
如果您傳遞null作為名稱,那么您正在創(chuàng)建一個(gè)本地集合酿炸。 它不在任何地方同步瘫絮。 它只是一個(gè)本地暫存器,支持Mongo風(fēng)格的查找梁沧,插入檀何,更新和刪除操作。 (在客戶端和服務(wù)器上廷支,這個(gè)暫存器都是用Minimongo來實(shí)現(xiàn)的频鉴。)
默認(rèn)情況下,Meteor將自動(dòng)收集每個(gè)文檔到每個(gè)連接的客戶端恋拍。 要關(guān)閉此行為垛孔,請刪除終端中的autopublish包:
而是調(diào)用Meteor.publish來指定哪些部分應(yīng)該發(fā)布給哪些用戶。
一般來說施敢,您將在應(yīng)用程序中將Mongo.Collection對(duì)象分配給全局變量周荐。 您只能為每個(gè)基礎(chǔ)Mongo集合創(chuàng)建一個(gè)Mongo.Collection對(duì)象。
如果您為集合或其任何檢索方法指定了一個(gè)轉(zhuǎn)換選項(xiàng)僵娃,那么文檔將在返回或傳遞給回調(diào)之前通過轉(zhuǎn)換函數(shù)傳遞概作。 這使您可以添加方法或以其他方式從數(shù)據(jù)庫表示中修改集合的內(nèi)容。 您也可以在特定查找默怨,findOne讯榕,允許或拒絕呼叫中指定轉(zhuǎn)換。 轉(zhuǎn)換函數(shù)必須返回一個(gè)對(duì)象匙睹,并且它們不能改變文檔的_id字段的值(盡管可以忽略它)愚屁。
變換函數(shù)不被稱為被動(dòng)的。 如果要將動(dòng)態(tài)更改的屬性添加到對(duì)象痕檬,請使用在調(diào)用時(shí)計(jì)算值的函數(shù)霎槐,而不是在變換時(shí)計(jì)算屬性。
在這個(gè)版本中梦谜,Minimongo有一些限制:
修改器中的$ pull只能接受某些類型的選擇器丘跌。
findAndModify袭景,聚合函數(shù)和map / reduce不受支持。
所有這些將在未來的版本中解決碍岔。有關(guān)完整的Minimongo發(fā)行說明浴讯,請參閱存儲(chǔ)庫中的packages / minimongo / NOTES。
Minimongo目前沒有索引蔼啦。 這很少會(huì)成為一個(gè)問題榆纽,因?yàn)榭蛻魮碛凶銐虻臄?shù)據(jù)以至于索引是值得的。
查找返回一個(gè)游標(biāo)捏肢。 它不會(huì)立即訪問數(shù)據(jù)庫或返回文檔奈籽。 游標(biāo)提供獲取返回所有匹配的文件,映射和forEach遍歷所有匹配的文件鸵赫,并觀察和觀察變化注冊回調(diào)衣屏,當(dāng)匹配的文件組更改。 游標(biāo)也實(shí)現(xiàn)ES2015的迭代協(xié)議辩棒。
集合游標(biāo)不是查詢快照狼忱。 如果數(shù)據(jù)庫在調(diào)用Collection.find和獲取游標(biāo)結(jié)果之間或在從游標(biāo)中獲取結(jié)果時(shí)發(fā)生變化,那么這些變化可能會(huì)出現(xiàn)在結(jié)果集中一睁,也可能不會(huì)出現(xiàn)在結(jié)果集中钻弄。
游標(biāo)是一個(gè)被動(dòng)數(shù)據(jù)源。 在客戶端者吁,第一次在反應(yīng)計(jì)算(例如模板或自動(dòng)運(yùn)行)中檢索游標(biāo)的文檔窘俺,包括fetch,map或forEach時(shí)复凳,Meteor將注冊對(duì)基礎(chǔ)數(shù)據(jù)的依賴關(guān)系瘤泪。 對(duì)更改光標(biāo)中文檔的集合的任何更改都會(huì)觸發(fā)重新計(jì)算。 要禁用此行為育八,請將{reactive:false}作為選項(xiàng)進(jìn)行查找对途。
請注意,指定字段時(shí)髓棋,只有對(duì)包含字段的更改才會(huì)觸發(fā)觀察掀宋,觀察更改和回調(diào)計(jì)算中的使用此光標(biāo)的無效計(jì)算中的回調(diào)。 仔細(xì)使用字段允許對(duì)不依賴整個(gè)文檔的計(jì)算實(shí)現(xiàn)更精細(xì)的反應(yīng)仲锄。
在客戶端,從加載頁面到發(fā)布數(shù)據(jù)從服務(wù)器到達(dá)您的客戶端集合為空時(shí)湃鹊,將會(huì)有一段時(shí)間儒喊。
按排序和跳過選項(xiàng)排序,查找與選擇器匹配的第一個(gè)文檔币呵。 如果未找到匹配的文檔怀愧,則返回undefined侨颈。
在集合中插入一個(gè)文檔。 返回其唯一的_id芯义。
要插入的文檔哈垢。 可能還沒有_id屬性,在這種情況下Meteor會(huì)為你生成一個(gè)屬性扛拨。
可選的耘分。 如果存在,用一個(gè)錯(cuò)誤對(duì)象作為第一個(gè)參數(shù)調(diào)用绑警,如果沒有錯(cuò)誤求泰,則_id作為第二個(gè)參數(shù)。
將文檔添加到集合中计盒。 文檔只是一個(gè)對(duì)象渴频,其字段可以包含EJSON兼容數(shù)據(jù)類型(數(shù)組,對(duì)象北启,數(shù)字卜朗,字符串,null咕村,true和false)的任意組合场钉。
插入將為您傳遞的對(duì)象生成唯一的ID,將其插入到數(shù)據(jù)庫中培廓,然后返回ID惹悄。 當(dāng)從不可信的客戶端代碼調(diào)用插入時(shí),只有在傳遞任何適用的允許和拒絕規(guī)則時(shí)才允許插入肩钠。
在服務(wù)器上泣港,如果不提供回調(diào),則插入塊直到數(shù)據(jù)庫確認(rèn)寫入价匠,否則在出錯(cuò)時(shí)引發(fā)異常当纱。 如果您提供回調(diào),插入仍然立即返回ID踩窖。 一旦插入完成(或失斊侣取),回調(diào)將被調(diào)用洋腮,并帶有錯(cuò)誤和結(jié)果參數(shù)箫柳。 在錯(cuò)誤情況下,結(jié)果是未定義的啥供。 如果插入成功悯恍,錯(cuò)誤是未定義的,結(jié)果是新的文檔ID伙狐。
在客戶端涮毫,插入永不阻止瞬欧。 如果您沒有提供回調(diào),并且服務(wù)器上的插入失敗罢防,那么Meteor將向控制臺(tái)發(fā)出警告艘虎。 如果你提供了一個(gè)回調(diào),Meteor會(huì)用錯(cuò)誤和結(jié)果參數(shù)來調(diào)用這個(gè)函數(shù)咒吐。 在錯(cuò)誤情況下野建,結(jié)果是未定義的。 如果插入成功渤滞,錯(cuò)誤是未定義的贬墩,結(jié)果是新的文檔ID。
修改集合中的一個(gè)或多個(gè)文檔妄呕。 返回匹配文檔的數(shù)量陶舞。
指定要修改的文檔
指定如何修改文檔
可選的。 如果存在绪励,則用錯(cuò)誤對(duì)象作為第一個(gè)參數(shù)調(diào)用肿孵,如果沒有錯(cuò)誤,則將受影響的文檔數(shù)作為第二個(gè)參數(shù)疏魏。
確實(shí)修改所有匹配的文件;為false只修改其中一個(gè)匹配文檔(默認(rèn))停做。
如果沒有找到匹配的文檔啰挪,則為真即插入文檔即舌。
根據(jù)修飾符修改與選擇器匹配的文檔(請參閱修改器文檔)。
更新的行為取決于它是由受信任的或不受信任的代碼調(diào)用缴罗。 受信任的代碼包括服務(wù)器代碼和方法代碼只厘。 不受信任的代碼包括客戶端代碼烙丛,如事件處理程序和瀏覽器的JavaScript控制臺(tái)。
可信代碼可以通過將multi設(shè)置為true來同時(shí)修改多個(gè)文檔羔味,并且可以使用任意的Mongo選擇器來查找要修改的文檔河咽。 它繞過了允許和拒絕設(shè)置的任何訪問控制規(guī)則。 如果您未通過回叫赋元,受影響文件的數(shù)量將從更新通話中返回忘蟹。
不受信任的代碼只能一次性修改單個(gè)文檔,由其_id指定搁凸。 只有在檢查任何適用的允許和拒絕規(guī)則后才允許修改媚值。 受影響的文檔數(shù)量將返回到回調(diào)。 不受信任的代碼不能執(zhí)行upserts护糖,除非在不安全的模式下杂腰。
在服務(wù)器上,如果不提供回調(diào)椅文,則更新數(shù)據(jù)塊直到數(shù)據(jù)庫確認(rèn)寫入喂很,否則在出錯(cuò)時(shí)引發(fā)異常。 如果您提供回調(diào)皆刺,則立即返回更新少辣。 更新完成后,如果失敗羡蛾,則使用單個(gè)錯(cuò)誤參數(shù)調(diào)用回調(diào)漓帅,如果更新成功,則使用第二個(gè)參數(shù)指示受影響的文檔數(shù)痴怨。
在客戶端上忙干,更新永遠(yuǎn)不會(huì)阻塞。 如果您不提供回調(diào)浪藻,并且服務(wù)器上的更新失敗捐迫,那么Meteor將向控制臺(tái)發(fā)出警告。 如果您提供回調(diào)爱葵,則Meteor會(huì)在出現(xiàn)錯(cuò)誤時(shí)使用錯(cuò)誤參數(shù)調(diào)用該函數(shù)施戴,如果更新成功,則會(huì)使用第二個(gè)參數(shù)指示受影響的文檔的數(shù)量萌丈。
你可以使用update來設(shè)置upsert選項(xiàng)為true來執(zhí)行Mongo upsert赞哗。 您還可以使用upsert方法執(zhí)行一個(gè)upsert,除了受影響的文檔數(shù)量外辆雾,還會(huì)返回插入的文檔的_id(如果有的話)肪笋。
修改集合中的一個(gè)或多個(gè)文檔,或者如果找不到匹配的文檔度迂,則插入一個(gè)藤乙。 返回鍵為numberAffected的對(duì)象(已修改的文檔數(shù))和insertedId(插入的文檔的唯一_id,如果有的話)英岭。
根據(jù)修飾符修改與選擇器匹配的文檔湾盒,或者如果沒有文檔被修改,則插入文檔诅妹。?upsert與upsert選項(xiàng)設(shè)置為true時(shí)調(diào)用update相同罚勾,除了upsert的返回值是包含關(guān)鍵字numberAffected和insertedId的對(duì)象。 (更新只返回受影響文檔的數(shù)量吭狡。)
找到與選擇器匹配的所有文檔尖殃,并將其從集合中刪除。
刪除行為取決于它是由受信任的或不受信任的代碼調(diào)用划煮。 受信任的代碼包括服務(wù)器代碼和方法代碼送丰。 不受信任的代碼包括客戶端代碼,如事件處理程序和瀏覽器的JavaScript控制臺(tái)弛秋。
受信任的代碼可以使用任意的Mongo選擇器來查找要?jiǎng)h除的文檔器躏,并且可以通過傳遞與多個(gè)文檔匹配的選擇器來一次刪除多個(gè)文檔俐载。 它繞過了允許和拒絕設(shè)置的任何訪問控制規(guī)則。 如果您未傳遞回叫登失,則刪除的文檔數(shù)將從刪除中返回遏佣。
作為安全措施,如果省略選擇器(或未定義)揽浙,則不會(huì)刪除任何文檔状婶。 如果您確實(shí)要從集合中刪除所有文檔,請將選擇器設(shè)置為{}馅巷。
不受信任的代碼一次只能刪除單個(gè)文檔膛虫,由其_id指定。 只有在檢查任何適用的允許和拒絕規(guī)則后钓猬,文檔才被刪除稍刀。 被刪除的文件的數(shù)量將被返回到回調(diào)。
在服務(wù)器上逗噩,如果不提供回調(diào)掉丽,則刪除塊直到數(shù)據(jù)庫確認(rèn)寫入,然后返回已刪除文檔的數(shù)量异雁,否則在出錯(cuò)時(shí)引發(fā)異常捶障。 如果您提供回調(diào),請立即刪除退貨纲刀。 一旦刪除完成项炼,回調(diào)在失敗的情況下被調(diào)用一個(gè)錯(cuò)誤參數(shù),或者如果刪除成功示绊,則第二個(gè)參數(shù)指示被刪除的文檔的數(shù)量锭部。
在客戶端上,刪除從不阻止面褐。 如果您不提供回調(diào)拌禾,并且在服務(wù)器上刪除失敗,那么Meteor將向控制臺(tái)發(fā)出警告展哭。 如果提供回調(diào)湃窍,則Meteor會(huì)在出現(xiàn)錯(cuò)誤時(shí)使用錯(cuò)誤參數(shù)調(diào)用該函數(shù),如果移除成功匪傍,則會(huì)使用第二個(gè)參數(shù)指示已移除文檔的數(shù)量您市。
允許用戶直接從客戶端代碼寫入這個(gè)集合,但要受到您定義的限制役衡。
雖然允許和拒絕使得開始構(gòu)建應(yīng)用程序變得容易茵休,但是似乎編寫安全允許和拒絕規(guī)則似乎更困難。 我們建議開發(fā)人員避免允許和拒絕,并在他們準(zhǔn)備從應(yīng)用程序中刪除不安全模式時(shí)直接切換到自定義方法榕莺。 有關(guān)更多詳細(xì)信息俐芯,請參閱關(guān)于安全的流星指南。
當(dāng)客戶端調(diào)用插入钉鸯,更新或刪除集合時(shí)泼各,集合的允許和拒絕回調(diào)將在服務(wù)器上調(diào)用,以確定是否允許寫入亏拉。 如果至少有一個(gè)允許回調(diào)允許寫入,并且沒有拒絕回調(diào)否認(rèn)寫入逆巍,則允許寫入繼續(xù)及塘。
這些檢查僅在客戶端試圖直接寫入數(shù)據(jù)庫時(shí)運(yùn)行,例如通過調(diào)用事件處理程序中的更新锐极。 服務(wù)器代碼是可信的笙僚,不受限制和拒絕。 這包括用Meteor.call調(diào)用的方法?-它們被期望進(jìn)行自己的訪問檢查灵再,而不是依賴允許和拒絕肋层。
您可以根據(jù)需要多次呼叫允許,每個(gè)呼叫可以包含插入翎迁,更新和刪除功能的任意組合栋猖。 如果他們認(rèn)為這個(gè)操作應(yīng)該被允許的話,函數(shù)應(yīng)該返回true汪榔。 否則蒲拉,他們應(yīng)該返回false,或者什么也沒有(undefined)痴腌。 在這種情況下雌团,流星將繼續(xù)搜索收集中的任何其他允許規(guī)則。
用戶userId想要將文檔文檔插入到集合中士聪。 如果允許锦援,返回true。
doc將包含_id字段剥悟,如果一個(gè)是由客戶端顯式設(shè)置灵寺,或者如果有一個(gè)活動(dòng)轉(zhuǎn)換。 你可以使用這個(gè)來防止用戶指定任意的_id字段懦胞。
用戶userId想要更新文檔文檔替久。 (doc是來自數(shù)據(jù)庫的文檔的當(dāng)前版本,沒有建議的更新躏尉。)返回true以允許更改蚯根。
只支持Mongo修飾符(像$ set和$ push這樣的操作)。 如果用戶試圖替換整個(gè)文檔而不是使用$ --modifiers,那么請求將被拒絕颅拦,而不檢查允許的功能蒂誉。
用戶userId想要從數(shù)據(jù)庫中刪除文檔。 返回true來允許這個(gè)距帅。
當(dāng)調(diào)用更新或刪除Meteor將默認(rèn)從數(shù)據(jù)庫中獲取整個(gè)文檔文檔右锨。 如果你有大的文檔,你可能只想獲取你的函數(shù)實(shí)際使用的字段碌秸。 通過將fetch設(shè)置為要檢索的字段名稱數(shù)組來完成此操作绍移。
如果您從未在集合上設(shè)置任何允許規(guī)則,則所有寫入集合的客戶端都將被拒絕讥电,并且只能從服務(wù)器端代碼寫入集合蹂窖。 在這種情況下,您將不得不為客戶端允許的每個(gè)可能的寫入創(chuàng)建一個(gè)方法恩敌。 然后瞬测,您將使用Meteor.call調(diào)用這些方法,而不是讓客戶端直接在集合上調(diào)用插入纠炮,更新和刪除月趟。
流星還有一個(gè)特殊的“不安全模式”,用于快速建立新應(yīng)用程序的原型恢口。 在不安全的模式下孝宗,如果您還沒有在集合上設(shè)置任何允許或拒絕規(guī)則,則所有用戶都具有對(duì)集合的完全寫入權(quán)限弧蝇。 這是不安全模式的唯一影響碳褒。 如果您在某個(gè)集合(甚至是Posts.allow({})上調(diào)用允許或拒絕,則在該集合上對(duì)訪問進(jìn)行檢查就像正常一樣看疗。 新流星項(xiàng)目默認(rèn)情況下以不安全模式啟動(dòng)沙峻。 要關(guān)閉它,只需在終端中運(yùn)行:
查看對(duì)數(shù)據(jù)庫的建議修改的函數(shù)两芳,如果應(yīng)該被拒絕摔寨,則返回true,即使允許規(guī)則另有說明怖辆。
可選的性能增強(qiáng)是复。 限制將從數(shù)據(jù)庫中提取的字段,以便通過更新進(jìn)行檢查并刪除函數(shù)竖螃。
覆蓋對(duì)集合的轉(zhuǎn)換淑廊。 通過null來禁用轉(zhuǎn)換。
雖然允許和拒絕使得開始構(gòu)建應(yīng)用程序變得容易特咆,但是似乎編寫安全允許和拒絕規(guī)則似乎更困難季惩。 我們建議開發(fā)人員避免允許和拒絕,并在他們準(zhǔn)備從應(yīng)用程序中刪除不安全模式時(shí)直接切換到自定義方法。 有關(guān)更多詳細(xì)信息画拾,請參閱關(guān)于安全的流星指南啥繁。
這就像允許,除非它允許你確保某些寫入被肯定拒絕青抛,即使有一個(gè)允許規(guī)則說明他們應(yīng)該被允許旗闽。
當(dāng)客戶端嘗試寫入集合時(shí),Meteor服務(wù)器首先檢查集合的拒絕規(guī)則蜜另。 如果沒有一個(gè)返回true适室,那么它會(huì)檢查該集合的允許規(guī)則。 只有當(dāng)沒有拒絕規(guī)則返回true并且至少有一個(gè)允許規(guī)則返回true時(shí)举瑰,Meteor才允許寫入亭病。
從Mongo.Collection包裝的npm mongodb驅(qū)動(dòng)程序模塊返回與此集合對(duì)應(yīng)的Collection對(duì)象。
從由Mongo.Collection包裝的npm mongodb驅(qū)動(dòng)程序模塊返回與此集合的數(shù)據(jù)庫連接對(duì)應(yīng)的Db對(duì)象嘶居。
要?jiǎng)?chuàng)建一個(gè)游標(biāo),使用find促煮。 要訪問游標(biāo)中的文檔邮屁,請使用forEach,map菠齿,fetch或ES2015的迭代協(xié)議佑吝。
為每個(gè)匹配的文檔,按順序和同步調(diào)用一次回調(diào)绳匀。
該接口與Array.forEach兼容芋忿。
當(dāng)從被動(dòng)計(jì)算中調(diào)用時(shí),forEach注冊對(duì)匹配文檔的依賴關(guān)系疾棵。
映射所有匹配文件的回調(diào)戈钢。 返回一個(gè)數(shù)組。
該接口與Array.map兼容是尔。
當(dāng)從被動(dòng)計(jì)算中調(diào)用時(shí)殉了,映射寄存器對(duì)匹配文檔的依賴關(guān)系。
在服務(wù)器上拟枚,如果回調(diào)產(chǎn)生薪铜,在第一個(gè)呼叫等待期間可能發(fā)生其他回呼。 如果需要嚴(yán)格的順序執(zhí)行恩溅,請使用forEach隔箍。
以數(shù)組形式返回所有匹配的文檔。
當(dāng)從被動(dòng)計(jì)算中調(diào)用時(shí)脚乡,獲取寄存器對(duì)匹配文檔的依賴關(guān)系蜒滩。
返回與查詢匹配的文檔數(shù)量。
如同其他功能一樣,只計(jì)算匹配文檔數(shù)量的依賴性帮掉。 (只更改或重新排序結(jié)果集中文檔的更新不會(huì)觸發(fā)重新計(jì)算弦悉。)
觀看一個(gè)查詢。 在結(jié)果集更改時(shí)接收回調(diào)蟆炊。
建立一個(gè)實(shí)時(shí)查詢稽莉,當(dāng)查詢結(jié)果發(fā)生變化時(shí)調(diào)用回調(diào)。 回調(diào)會(huì)收到受影響文檔的全部內(nèi)容以及舊內(nèi)容(如果適用)涩搓。 如果您只需要接收更改的字段污秆,請參閱observeChanges。
當(dāng)您不關(guān)心結(jié)果集中文檔的順序時(shí)昧甘,使用添加良拼,更改和刪除。 他們比添加更有效率充边,更改了庸推,并刪除了。
在觀察返回之前浇冰,添加(或addedAt)將被調(diào)用零次或更多次來傳遞查詢的初始結(jié)果贬媒。
觀察返回一個(gè)實(shí)時(shí)查詢句柄,這是一個(gè)停止方法的對(duì)象肘习。 呼叫停止沒有參數(shù)停止調(diào)用回調(diào)函數(shù)并拆除查詢际乘。 查詢將永遠(yuǎn)運(yùn)行,直到你打電話給這個(gè)漂佩。 如果從Tracker.autorun計(jì)算中調(diào)用觀察脖含,則在重新運(yùn)行或停止計(jì)算時(shí)會(huì)自動(dòng)停止觀察。 (如果光標(biāo)是通過選項(xiàng)reactive設(shè)置為false創(chuàng)建的投蝉,則只會(huì)傳遞初始結(jié)果养葵,不會(huì)調(diào)用任何進(jìn)一步的回調(diào);不需要在句柄上調(diào)用stop。)
觀看一個(gè)查詢瘩缆。 在結(jié)果集更改時(shí)接收回調(diào)港柜。 只有舊文件和新文件之間的差異傳遞給回調(diào)。
監(jiān)聽一個(gè)實(shí)時(shí)查詢咳榜,當(dāng)查詢結(jié)果發(fā)生變化時(shí)調(diào)用回調(diào)夏醉。 與觀察相反,observeChanges僅提供新舊結(jié)果集之間的差異涌韩,而不是所更改文檔的全部內(nèi)容畔柔。
如果不使用addedBefore或movedBefore,observeChanges會(huì)顯著更高效臣樱。
在observeChanges返回之前靶擦,添加(或addedBefore)將被調(diào)用零次或多次來傳遞查詢的初始結(jié)果腮考。
observeChanges返回一個(gè)活動(dòng)的查詢句柄,它是一個(gè)停止方法的對(duì)象玄捕。 呼叫停止沒有參數(shù)停止調(diào)用回調(diào)函數(shù)并拆除查詢踩蔚。 查詢將永遠(yuǎn)運(yùn)行,直到你打電話給這個(gè)枚粘。 如果從Tracker.autorun計(jì)算中調(diào)用observeChanges馅闽,則在重新運(yùn)行或停止計(jì)算時(shí)會(huì)自動(dòng)停止。 (如果光標(biāo)是通過選項(xiàng)reactive設(shè)置為false創(chuàng)建的馍迄,則只會(huì)傳遞初始結(jié)果福也,不會(huì)調(diào)用任何進(jìn)一步的回調(diào);不需要在句柄上調(diào)用stop。)
不像觀察攀圈,觀察變化不提供絕對(duì)的位置信息(即暴凑,在指數(shù)位置,而不是位置之前)赘来。這是為了效率现喳。
創(chuàng)建一個(gè)Mongo風(fēng)格的ObjectID。如果不指定hexString犬辰,則ObjectID將隨機(jī)生成(不使用MongoDB的ID構(gòu)造規(guī)則)拿穴。
可選的。 要?jiǎng)?chuàng)建的ObjectID的24個(gè)字符的十六進(jìn)制內(nèi)容
Mongo.ObjectID遵循與Node MongoDB驅(qū)動(dòng)程序ObjectID類相同的API忧风。請注意,您必須使用equals方法(或EJSON.equals)來比較它們; ===運(yùn)算符將不起作用球凰。如果您正在編寫需要處理可能是字符串或ObjectID的_id字段的泛型代碼狮腿,請使用EJSON.equals而不是===來比較它們。
由Meteor創(chuàng)建的ObjectID值不會(huì)有g(shù)etTimestamp方法的有意義的答案呕诉,因?yàn)镸eteor目前完全隨機(jī)地構(gòu)造它們缘厢。
最簡單的選擇器只是一個(gè)字符串或Mongo.ObjectID。 這些選擇器將文檔與其_id字段中的值匹配甩挫。
一個(gè)稍微復(fù)雜的選擇器形式是一個(gè)包含必須在文檔中匹配的一組鍵的對(duì)象:
但是他們也可以包含更復(fù)雜的測試:
See the complete documentation.
修飾符是一個(gè)對(duì)象贴硫,它描述了如何通過改變其中的一些字段來更新文檔。 一些例子:
但是伊者,如果一個(gè)修飾符不包含任何$ -operators英遭,那么它將被解釋為一個(gè)文字文檔,并完全替代以前在數(shù)據(jù)庫中的任何東西亦渗。 (Literal文檔修飾符當(dāng)前不被驗(yàn)證的更新支持挖诸。)
排序可以使用您選擇的幾種語法來指定:
最后的形式只有在你的JavaScript實(shí)現(xiàn)保留了對(duì)象中鍵的順序的情況下才能工作。 大多數(shù)情況下法精,大部分時(shí)間都這樣做多律,但這取決于你自己痴突。
對(duì)于本地集合,您可以傳遞一個(gè)比較函數(shù)狼荞,它接收兩個(gè)文檔對(duì)象辽装,如果第一個(gè)文檔第一個(gè)按順序排列,則返回-1;如果第二個(gè)文檔排在第一個(gè)相味,則返回1;如果兩個(gè)文檔都不在另一個(gè)之前拾积,則返回0。 這是MongoDB的Minimongo擴(kuò)展攻走。
查詢可以指定一組特定的字段來包含或從結(jié)果對(duì)象中排除殷勘。
要從結(jié)果對(duì)象中排除特定字段,字段說明符是一個(gè)字典昔搂,其鍵是字段名玲销,值為0.所有未指定的字段都包含在內(nèi)。
要僅包含結(jié)果文檔中的特定字段摘符,請使用1作為值贤斜。?_id字段仍然包含在結(jié)果中。
除了一個(gè)例外逛裤,不能混合包含和排除樣式:鍵必須全部為1或全為0.例外是瘩绒,您可以在包含說明符中指定_id:0,這將使_id超出結(jié)果對(duì)象 以及带族。 但是锁荔,此類字段說明符不能與observeChanges,觀察蝙砌,從發(fā)布函數(shù)返回的游標(biāo)或模板中的{{#each}}中使用的游標(biāo)一起使用阳堕。 它們可以與fetch,findOne择克,forEach和map一起使用恬总。
例如$和$ elemMatch等字段操作符在客戶端尚不可用。
一個(gè)更高級(jí)的例子:
在開發(fā)應(yīng)用程序時(shí)肚邢,Meteor啟動(dòng)一個(gè)本地MongoDB實(shí)例并自動(dòng)連接到它壹堰。 在生產(chǎn)環(huán)境中,您必須以標(biāo)準(zhǔn)的mongo連接字符串格式指定一個(gè)指向數(shù)據(jù)庫的MONGO_URL環(huán)境變量骡湖。
如果你想連接到不同的MongoDB實(shí)例贱纠,你也可以在開發(fā)中設(shè)置MONGO_URL。
如果你想使用oplog tailing進(jìn)行l(wèi)ivequeries响蕴,你還應(yīng)該設(shè)置MONGO_OPLOG_URL(通常你需要一個(gè)特殊的用戶來訪問oplog并巍,但是細(xì)節(jié)可以根據(jù)MongoDB的不同而有所不同)。
從Meteor 1.4開始换途,您必須確保您在METEOR_OPLOG_URL上設(shè)置了replicaSet參數(shù)