2010-07-01 48 views
4

我完全陌生於Mongo和RoR,來自PHP背景。學習RoR和Mongo,爲什麼不計算陣列的票數

我正要通過本教程的數據建模 http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails

,併爲何教程建議存儲票字段和更新該字段爲

 
db.stories.update({_id: story_id, voters: {'$ne': user_id}}, 
    {'$inc': {votes: 1}, '$push': {voters: user_id}}); 
而不只是

問題被擊中
 
db.stories.update({_id: story_id, voters: {'$ne': user_id}}, 
    {'$push': {voters: user_id}}); 

然後計算然後

Story.voters.count 
得到投票的用戶數的計數?

我知道這是一個教程,但它似乎並不是管理數據的最有效方式。

+0

是的。你是對的。曾經是'長度'(你正在尋找的attr)沒有被緩存,但現在它是這樣,你應該使用它。 – 2010-07-01 16:50:35

回答

1

通過解釋維護計數緩存字段(投票)的目的,本教程可以做得更好,因爲只有在您打算對陣列大小進行範圍查詢時才需要該教程。

the docs

不能使用$大小來找到大小的範圍 (例如:陣列, 超過1元)。如果您需要針對範圍查詢 ,請創建一個額外的 大小字段,並在您添加元素時增加。

在未來,我們可能不會因爲查詢功能不斷增長而這樣做。請參閱JIRA門票SERVER-478