2012-11-18 46 views
0

目前,我正在實施一個使用nodejs/expressjs和 mongoDB(+ mongoose)作爲數據庫的博客應用程序。它迄今爲止工作正常,但現在我試圖 實施嵌套/線程評論。螺紋評論和主幹js

當我讀到關於如何在 中存儲這些註釋的不同方法時,我會將每個註釋存儲在單獨的文檔中以保留 的靈活性。

相比之下存儲嵌入在一個線程我會找回 我在無序的形式評論從DB與每個父引用所有評論... 物化路徑將是一個選擇,但隨後,索引可能會產生問題 由於它們的長度。

我打算給實際的排序客戶端時渲染 的評論 - 一個好主意?

我讀了關於backboneJS(關係),並問自己,如果 這是一個合適的工具,可以幫助實現它。

回答

1

是將評論作爲單獨的文檔存儲在Mongo中就可以。鍵控查詢在Mongo中通常很快,因此維護線程和註釋的單獨標準化結構應該可行。

# Create thread: 
db.threads.insert({ id: 123, name: "My thread title..." }) 

# Add comment: 
db.comments.insert({ id: 1, threadId: 123, text: "My comment text..." }) 

# Find comments in thread by order of insertion (assuming ids are sequential): 
db.comments.find({ threadId: 123 }).sort({ id: 1 }) 

如果您要構建單頁面應用程序,Backbone是一個很好的框架。此外,我建議看看Backbone Marionette。這是一個擴展,使很多很酷的事情成爲可能(也是很好的文檔)。

+0

感謝您的回答和有用的提示。 雖然你幫助我不完全確定把邏輯放在哪裏。 mongo排序: 非常適合帶有註釋的單線程的東西,但想象一下有很多帶有不同縮進的註釋。時間排序會破壞實際的線程順序。 翡翠: 糟糕,因爲「長」運行,CPU密集的東西。 客戶端:除簡單渲染註釋之外,還有許多必需的邏輯。 我正在尋找一種儘可能多的方式在Mongo方面,同時保留評論的實際排序。 – JoeFrizz

+1

如果我沒有記錯的話,Mongo會按照插入順序存儲集合,所以如果您發出find(),那麼您應該可以按原樣使用它(即排序順序將是按時間順序排列的插入順序)。 –

+1

如果你想在客戶端進行排序,'Backbone.Collection'結合'Backbone.Marionette.CollectionView'使得基於自定義排序功能很容易實現。 –