如何为特定ID创建多种产品

时间:2019-05-31 17:23:45

标签: asp.net-web-api asp.net-core azure-cosmosdb

我是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的实体}

2 个答案:

答案 0 :(得分:1)

您应该使用 DocumentClient.UpsertDocumentAsync 而不是 CreateDocumentAsync 来创建新文档或更新现有文档

await _client.UpsertDocumentAsync(collectionLink, document);

答案 1 :(得分:1)

对于这样的事情,您不应该拥有一个庞大的文档。使用单独的集合,并将每个product保存为单独的文档,并将供应商,行业和类别作为该文档上的字段。然后,您可以轻松地修改单个产品记录,并在查询中检索给定供应商或类别的所有产品。