2015-04-17 82 views
1

Collection中的文檔包含一個名爲userId的字段,該字段存儲創建該文檔的用戶的_id。用戶可能會創建多個文檔。流星如何從集合中有效地發佈文檔?

該文件的_id存儲在陣列內的用戶配置文件whcih包括他們已經創造了

由於所有文件_id字段建立索引,是有速度的巨大差異,找到所有文檔_id並在以下兩個遊標之間發佈?我在問,這個藏品將會保存數千份文件。

Collection.find({_id: {$in: {arrayOf_ids}}}) 

Collection.find({'userId': this.userId}) 

回答

2

讓備份蜱... 如果1個用戶有很多文檔,每個文檔有1個用戶,你爲什麼將其存儲在兩個地方?您將自己寫入數據庫的次數增加了一倍,從而使自己面臨不一致。只需將userId存儲在文檔中,該字段的索引即&即可完成。

回答你的問題: 第一個不會真的使用索引,因爲你本質上是傳入一個數組,mongo必須迭代以查看是否有一個值與id匹配。 如果您_id是3,它是大致相當於:

array = [1,2,3] 
array.indexOf(3); 

您可以驗證通過調用.explain(),看看它是多少文檔觸動,它使用了索引,&所花費的時間。謝謝,直到你達到成千上萬,沒有一件事情真的很重要,但提前做好計劃!

+0

一個用戶有很多文檔,正如我已經解釋過的,這些文檔id存儲在用戶配置文件中供他們參考。關於mongo如何遍歷數組的說明很有幫助。謝謝Matt – meteorBuzz

+1

的權利,而不是存儲在用戶配置文件中的ID,訂閱文檔集合。 –