我將幾種不同類型(實體類型?)的文檔存儲在一個集合中。獲得某種類型的所有文檔的最佳方式是什麼(就像你從表中使用select *
一樣)。DocumentDB:獲取所有相同實體類型的文檔
選項我看的更遠:
- 包含類型爲屬性。但這意味着在獲取文檔時需要查看每個文檔,對嗎?
- 在文檔ID前加上類型名稱,然後嘗試使用
typename*
通過ID進行搜索。
有沒有更好的方法來做到這一點?
我將幾種不同類型(實體類型?)的文檔存儲在一個集合中。獲得某種類型的所有文檔的最佳方式是什麼(就像你從表中使用select *
一樣)。DocumentDB:獲取所有相同實體類型的文檔
選項我看的更遠:
typename*
通過ID進行搜索。有沒有更好的方法來做到這一點?
沒有內置的實體類型屬性,但您當然可以創建自己的屬性,並確保將其編入索引。在這一點上,它是添加一個WHERE子句也很簡單:
WHERE docs.docType = "SomeType"
假設它是一個基於散列的索引,這應該提供有效的查找,並過濾掉不想要的文檔類型。
雖然你可以嵌入到屬性(如文檔ID)的類型,然後你必須做部分字符串匹配,這將不如索引屬性比較有效。
如果您想知道此查詢耗費的是什麼成本,則RU值將顯示在門戶網站中,並通過返回標題顯示。
如果您對集合中的類型屬性建立索引,則它不會是完整的掃描。
我同意戴維的回答,並且使用一個docType
字段是我第一次開始使用DocumentDB時所做的。但是,在做了一些實驗之後,我開始使用另一種選擇。即創建is<Type>
字段並將其值設置爲true。對於查詢而言,這比使用單個字符串字段稍微有效一些,因爲索引本身是較小的部分索引,但可能會佔用稍多的存儲空間。
這種方法的另一個優點是它爲繼承和mixin提供了優勢。例如,我在某些實體上都有isLookup=true
和isState=true
。我也有其他查找類型。然後在我的應用程序代碼中,所有查找字段的一些行爲是常見的,其他行爲僅適用於狀態類型。
我見過你在多個答案中推薦這種技術。你如何實現這個'isLookup = true'?你是在每個實體類中添加這些屬性還是你開發了一個更通用的技術? – trailmax
我使用node.js所以不知道如何使用.NET –
來實現它。感謝您澄清這些問題 - 我發現您對DocumentDB最有用的答案。 – trailmax