2011-11-21 78 views
30

我知道MongoDB能夠處理大量請求/秒,但是讓我們說我必須查詢集合中很多文檔,並給出它們的_id;什麼聽起來更好:使用所有想要獲取的id的_id屬性進行$ in,或循環findOne查詢?

回答

32

我肯定會使用$ in查詢並提供一個_ids數組。

例子:

db.collection.find({ 
    "key": { 
     "$in": [ 
      ObjectId("xxx"), 
      ObjectId("yyy"), 
      ObjectId("zzz") 
     ] 
    } 
}) 

爲什麼?

  • 如果循環,每個查詢創建和耗盡遊標都會有一定的設置和拆卸,這會創建開銷。
  • 如果您不是在本地計算機上執行此操作,它還會爲每個請求創建tcp/ip開銷。在本地你可以使用域套接字。
  • 默認情況下創建的「_id」上有一個索引,並且收集一組文檔以在批處理請求中返回應該非常快,因此不需要將其分解爲更小的查詢。

如果您想查看,還有一些其他文檔here

+8

如果$ in ...中有很多項目,例如100或1,000,那該怎麼辦? – ewindsor

+0

@ewindsor高達1000的任何東西通常都可以。之後,我會重新考慮您擁有的模式並開始預先計算數據。 –

+1

可以在一個JSON對象數組中使用'$ in'嗎? –

相關問題