我使用documentDB作为项目的后端。 我创建了一个名为ResellerCollection的集合。 在它下面,我添加了文档作为经销商,其中ID分配给它。 现在,在Reseller文档下,我添加了一个Customer列表,现在我想按特定ID删除经销商文档的客户。
在documentDB中生成的我的JSON如下。
{
"id": "73386791-5895-4a56-9108-df4a773331fe",
"Name": "Nadeem",
"PrimaryContact": "1234",
"Address": "bhusari clny",
"City": "pune",
"State": "maharashtra",
"Country": "india",
"ZipCode": "222",
"Telephone": "45234343",
"Email": "abc@xyz.com",
"Website": "asdfsd.com",
"Customer": [
{
"id": "4acf3ca9-f9e4-4117-a471-7ce8f905baec",
"FullName": "Test Cust1",
"Company": "safds",
"JobTitle": "sadf",
"Email": "abcd@xyz.com",
"Address": "asdfsaf",
"City": "sdf",
"State": "sdf",
"Country": "sadf",
"ZipCode": "2343",
"Telephone": "45234343",
"MerchantID": "232",
"IdentificationNo": "2342343",
"IsActive": true,
"CustomerGroupID": "34",
"ResellerID": "73386791-5895-4a56-9108-df4a773331fe"
},
{
"id": "e0d6d099-3d5d-4776-9b84-14b7ae0b9911",
"FullName": "Test Cust2",
"Company": "safds",
"JobTitle": "sadf",
"Email": "abcd@xyz.com",
"Address": "asdfsaf",
"City": "sdf",
"State": "sdf",
"Country": "sadf",
"ZipCode": "2343",
"Telephone": "sadf",
"MerchantID": "232",
"IdentificationNo": "2342343",
"IsActive": true,
"CustomerGroupID": "34",
"ResellerID": "73386791-5895-4a56-9108-df4a773331fe"
}
],
"UserId": "f807f027-2e21-45b1-b786-e4d2b3d677cb",
"_rid": "+JBQAOQWHQENAAAAAAAAAA==",
"_self": "dbs/+JBQAA==/colls/+JBQAOQWHQE=/docs/+JBQAOQWHQENAAAAAAAAAA==/",
"_etag": "\"0a004764-0000-0000-0000-583bd8b50000\"",
"_attachments": "attachments/",
"_ts": 1480317104
}
请建议我如何在MVC中为客户编写删除功能。我是否应该删除删除特定客户的删除或是否必须更新整个客户列表?
答案 0 :(得分:1)
删除数组元素(或对文档的任何其他更改)的唯一方法是获取整个文档,修改它,然后创建/插入整个文档。您可以在客户端或存储过程中执行此操作。
尽量不要将集合视为传统数据库中的表或MongoDB中的集合。我曾经说过,把它们想象成"分区"但是对于分区集合,即使这种区别也没有用。我现在使用单个分区集合。我通过在每个文档中包含一个元素来区分文档类型:isReseller = true
或isCustomer = true
作为示例。或者,您可以type = 'Reseller'
或type = 'Customer'
。但是,如果一个经销商的客户自己是经销商,前者将允许您添加is___ = true
,后者则不会。
David Makogon所说的绝对是一种担忧。除非经销商仅限于少数客户,否则最好将它们单独存储并使用外键链接它们。这样,删除或添加一个是一步。但是,获得经销商及其所有客户将是两次往返。
答案 1 :(得分:1)
两种方法。
在这两种实现中,您可能都希望使用ETag执行条件写入,以避免跨多个客户端/编写者的任何破坏。
正如Larry和David指出的那样,您还应该考虑不同的JSON建模选项,例如将客户数据存储为单独的文档,或者仅存储阵列中的ID与所有相关的客户数据。