幾個月前我問了一個問題,Meteor似乎有答案。流星如何接收MongoDB查詢結果的更新?
Which, if any, of the NoSQL databases can provide stream of *changes* to a query result set?
如何流星接收更新到MongoDB中查詢的結果?
謝謝,
Chris。
幾個月前我問了一個問題,Meteor似乎有答案。流星如何接收MongoDB查詢結果的更新?
Which, if any, of the NoSQL databases can provide stream of *changes* to a query result set?
如何流星接收更新到MongoDB中查詢的結果?
謝謝,
Chris。
從文檔:
在服務器上,與該名稱的集合後端蒙戈服務器上創建的。當您在服務器上調用該集合上的方法時,它們會直接轉換爲正常的Mongo操作。
在客戶端上,創建了一個Minimongo實例。 Minimongo本質上是一個內存中,非持久化的Mongo,在 純JavaScript中。它充當本地緩存,僅存儲該客戶端正在使用的數據庫的子集。 查詢客戶端(查找)直接從此緩存中提供,而不是 與服務器通話。
當您向客戶端上的數據庫(插入,更新,刪除), 命令同時立即執行在客戶端上,並且, ,它運到服務器和太在那裏執行。 livedata包是負責這個。
這也解釋了客戶機到服務器
服務器對客戶從我所知是livedata和蒙戈 - livedata包。
https://github.com/meteor/meteor/tree/master/packages/mongo-livedata
https://github.com/meteor/meteor/tree/master/packages/livedata
希望有所幫助。
你想爲此query.observe()
。假設您有一個帶有標籤字段的Posts
集合,並且您希望在添加具有important
標籤的帖子時收到通知。
http://docs.meteor.com/#observe
// collection of posts that includes array of tags
var Posts = new Meteor.Collection('posts');
// DB cursor to find all posts with 'important' in the tags array.
var cursor = Posts.find({tags: 'important'});
// watch the cursor for changes
var handle = cursor.observe({
added: function (post) { ... }, // run when post is added
changed: function (post) { ... } // run when post is changed
removed: function (post) { ... } // run when post is removed
});
,如果你想要做的事在每個瀏覽器時後的變化,您可以運行在客戶端上運行此代碼。或者你可以在服務器上運行它,如果你想說當添加一個重要的帖子時發送一封郵件給團隊。
請注意,added
和removed
指的是查詢,而不是文檔。如果你有一個現有的職位文檔和運行
Posts.update(my_post_id, {$addToSet: {tags: 'important'}});
這將觸發「添加」的回調,因爲職位是被添加到該查詢結果。
這是一個非常好的答案,但不是這個問題。我問的是Meteor如何從MongoDB獲得更改流,而不是如何從Meteor獲取更改。 – fadedbee 2012-04-12 13:19:35
目前,流星對於一個實例/過程確實很好。在這種情況下,所有查詢都將通過此實例進行,並可將其廣播回其他客戶端。另外,它每10秒輪詢一次MongoDB,以查看由外部查詢完成的對數據庫的更改。他們計劃使用1.0來提高可伸縮性,並希望允許多個實例通知每個變化。
另一方面,DerbyJS正在使用Redis PubSub。
我還沒有測試過的一件事是插入到Meteor外部*完成的MongoDB集合是否傳播到客戶端。 – fadedbee 2012-04-20 14:56:56
我已經瀏覽了代碼,但是我看不到MongoDB通知Meteor更新集合的行。 – fadedbee 2012-04-20 14:58:13
@chrisdew我剛剛插入一條記錄直接到MongoDB,它出現在瀏覽器中。所以我猜服務器會收到通知。 – 2012-04-27 17:05:59