在DocumentDb中,解耦數據以便將它們保存在單獨集合中的最佳方式和位置是什麼?將數據保存到DocumentDb中的多個集合中
到目前爲止,大多數關於如何使用DocumentDb管理數據的例子都使用簡單的對象,但在現實生活中,我們幾乎沒有做過。我只想了解在將它們保存爲DocumentDb中的Json對象之前,我需要如何處理我的複雜類。
我們來看下面的例子。我將把項目信息保存到Projects集合中,但我不想在項目文檔中保存項目團隊中的全名。我只是想將他們的EmployeeId保存在項目文檔中。我有一個單獨的員工集合,我想要保存個人/員工的具體信息。我的項目對象是這樣的:
public class Project
{
[JsonProperty(PropertyName="id")]
public int ProjectId {get; set;}
[JsonProperty(PropertyName="projectName")]
public string ProjectName {get; set;}
[JsonProperty(PropertyName="projectType")]
public string ProjectType {get; set;}
[JsonProperty(PropertyName="projectTeam")]
public List<TeamMember> ProjectTeam {get; set}
}
我TeamMember類從Employee對象繼承,看起來像這樣:
public class TeamMember : Employee
{
[JsonProperty(PropertyName="position")]
public string Position {get; set;}
}
我Employee類看起來是這樣的:
public class Employee
{
[JsonProperty(PropertyName="id")]
public int EmployeeId {get; set;}
[JsonProperty(PropertyName="firstName")]
public string FirstName {get; set;}
[JsonProperty(PropertyName="lastName")]
public string LastName {get; set;}
[JsonProperty(PropertyName="gender")]
public string Gender {get; set;}
[JsonProperty(PropertyName="emailAddress")]
public string EmailAddress {get; set;}
}
保存到之前項目集合,這裏是我的項目文檔應該是什麼樣子的例子:
{
id: 12345,
projectName: "My first project",
projectType: "Construction Project",
projectTeam: [
{ id: 7777, position: "Engineer" },
{ id: 8998, position: "Project Manager" }
]
}
如您所見,我將我的項目信息與員工數據分離,以分別將其存儲在他們自己的集合,項目和員工集合中。
讓我們不瞭解爲什麼我應該或不應該分離數據。我只想看看我應該如何以及在哪裏處理解耦以產生最快的結果。我想遵循最佳實踐,所以我只想看看使用DocumentDb的專家如何處理這種情況。
我能想到的兩個地方來處理這一點,但我想知道是否有這樣做更好,更直接的方式:
- 我可以在我的項目類轉換成JSON對象我的C#代碼中並將JSON對象傳遞給DocumentDb進行存儲。
- 或者,我可以將我的Project對象直接傳遞給DocumentDb,存入JavaScript存儲過程,並且可以處理DocumentDb中兩個或多個集合中的解耦和存儲數據。
這裏想什麼,我知道:
- 這是處理解耦數據在正確的地方?
- 哪個會提供更好的性能?
- 有沒有更好的方法來處理這個問題?我一直在閱讀有關如何將POCO類傳遞給DocumentDb的知識,它只是爲我處理它們。 DocumentDb會處理這些更復雜的場景嗎?如果是這樣,怎麼樣?
我感謝您的幫助。謝謝。
瑞恩,你是對的!我把收藏當作桌子。如果我將兩個項目和員工都存儲在同一個集合中,我將如何確定要查詢的文檔類型? – Sam 2014-09-11 22:36:06
今天做到這一點的最簡單方法是爲每個JSON文檔添加一個「type」屬性並將其包含在查詢中。 WHERE type = project或WHERE type = employee 我知道你現在只限於WHERE中的3個子句,但是現在可能會在任何一天更改以允許更多。 我們很樂意聽到其他方式可以讓你更輕鬆,所以請保留反饋意見。 – 2014-09-12 23:33:23
再次感謝瑞恩 – Sam 2014-09-13 00:02:14