2016-04-10 59 views
3

我將幾種不同類型(實體類型?)的文檔存儲在一個集合中。獲得某種類型的所有文檔的最佳方式是什麼(就像你從表中使用select *一樣)。DocumentDB:獲取所有相同實體類型的文檔

選項我看的更遠:

  1. 包含類型爲屬性。但這意味着在獲取文檔時需要查看每個文檔,對嗎?
  2. 在文檔ID前加上類型名稱,然後嘗試使用typename*通過ID進行搜索。

有沒有更好的方法來做到這一點?

回答

4

沒有內置的實體類型屬性,但您當然可以創建自己的屬性,並確保將其編入索引。在這一點上,它是添加一個WHERE子句也很簡單:

WHERE docs.docType = "SomeType" 

假設它是一個基於散列的索引,這應該提供有效的查找,並過濾掉不想要的文檔類型。

雖然你可以嵌入到屬性(如文檔ID)的類型,然後你必須做部分字符串匹配,這將不如索引屬性比較有效。

如果您想知道此查詢耗費的是什麼成本,則RU值將顯示在門戶網站中,並通過​​返回標題顯示。

1

如果您對集合中的類型屬性建立索引,則它不會是完整的掃描。

2

我同意戴維的回答,並且使用一個docType字段是我第一次開始使用DocumentDB時所做的。但是,在做了一些實驗之後,我開始使用另一種選擇。即創建is<Type>字段並將其值設置爲true。對於查詢而言,這比使用單個字符串字段稍微有效一些,因爲索引本身是較小的部分索引,但可能會佔用稍多的存儲空間。

這種方法的另一個優點是它爲繼承和mixin提供了優勢。例如,我在某些實體上都有isLookup=trueisState=true。我也有其他查找類型。然後在我的應用程序代碼中,所有查找字段的一些行爲是常見的,其他行爲僅適用於狀態類型。

+0

我見過你在多個答案中推薦這種技術。你如何實現這個'isLookup = true'?你是在每個實體類中添加這些屬性還是你開發了一個更通用的技術? – trailmax

+0

我使用node.js所以不知道如何使用.NET –

+0

來實現它。感謝您澄清這些問題 - 我發現您對DocumentDB最有用的答案。 – trailmax

相關問題