我是cosmos db的新手,我正在基于cosmos db创建一个Web api项目。我创建了基本的crud操作。现在的问题之一是供应商拥有更多的行业,在行业中供应商可能拥有多个产品。我创建了一个产品,当我尝试创建更多产品时,它显示错误ID已被使用。在这里,我使用id作为分区键。 问题二是某些供应商可能仅具有类别,因此我需要将产品直接添加到他们那里。 请帮助我解决问题的结构。 添加产品代码:
public async Task<Catalog> AddProduct(
Catalog order)
{
var requestOptions =
new RequestOptions
{
PartitionKey = new PartitionKey(order.Id.ToString())
};
var catalogDocument = await _cosmosClient.CreateDocumentAsync(
UriFactory.CreateDocumentCollectionUri(
_azureCosmosDbOptions.Value.DatabaseId, "catalog"), order, requestOptions);
return
(Catalog)((dynamic)catalogDocument.Resource);
}
我的json代码:
"id": "8000003c-0001-fb00-b63f-84710c7967aa",
"industy": {
"category": [
{
"subcategory": [
{
product1,product2.....
}
错误消息: {“ code”:409,“ body”:{“ code”:“ Conflict”,“ message”:“系统中已存在具有指定ID的实体}
答案 0 :(得分:1)
您应该使用 DocumentClient.UpsertDocumentAsync
而不是 CreateDocumentAsync
来创建新文档或更新现有文档
await _client.UpsertDocumentAsync(collectionLink, document);
答案 1 :(得分:1)
对于这样的事情,您不应该拥有一个庞大的文档。使用单独的集合,并将每个product
保存为单独的文档,并将供应商,行业和类别作为该文档上的字段。然后,您可以轻松地修改单个产品记录,并在查询中检索给定供应商或类别的所有产品。