将原始JSON写入CosmosDB和Azure函数

7uzetpgm  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(123)

我想从HTTP帖子中获取原始JSON主体,并将其直接写入CosmosDB。
假设数据如下所示:

{
  "id": "123456",
  "storeName": "City Bar and Grille",
  "invoiceTotal": 65
}

但是,documentsOut.AddAsync命令使用如下格式:

wait documentsOut.AddAsync(new
  {
    // create a random ID
    id = System.Guid.NewGuid().ToString(),
    body = sourceJson
  });

最后我得到了一个文档,看起来像这样:

{
  "id": "0e99d3ab-1956-4c0a-8ec1-99de5c987555",
  "body": {
    "id": "123456",
    "storeName": "City Bar and Grille",
    "invoiceTotal": 65
  }
}

我真正想要的是这样的结局:

{
  "id": "123456",
  "storeName": "City Bar and Grille",
  "invoiceTotal": 65
}

我想完全删除id = System.Guid.NewGuid().ToString()(这应该不难)。
如何传递原始JSON而不需要将其添加到某个父节点(例如body)?

dwthyt8l

dwthyt8l1#

使用一个与你在问题中分享的类似的例子。我们可以创建一个模型类,它的属性要存储在数据库中。

public class StoreDetails : TableEntity
{
    [JsonProperty("id")]
    public string Id { get; set; } 
    [JsonProperty("storeName")]
    public string StoreName { get; set; }
    [JsonProperty("invoiceTotal")]
    public string InvoiceTotal { get; set; }
}

然后可以创建模型的对象并将该对象传递给AddAsync()方法。如下图所示。

var item = new StoreDetails
        {
            Id = Guid.NewGuid().ToString(),
            StoreName = data.StoreName,
            InvoiceTotal = data.InvoiceTotal
        };
        await storeDetailOut.AddAsync(item);

当我们触发post API时,得到的响应如下所示。

最后,我们可以看到相同的记录存储在CosmosDB中。

mwngjboj

mwngjboj2#

只是为了正式我的评论作为一个答案:具体来说,您要创建Cosmos DB文档的body属性:

wait documentsOut.AddAsync(new
  {
    // create a random ID
    id = System.Guid.NewGuid().ToString(),
    body = sourceJson
  });

同时,您忽略了传入的ID。由于您希望保留该ID,您可以复制该ID(只要它在分区中保持唯一),而不是生成新的GUID,并且还可以从sourceJson获取单独的属性,以避免嵌套的body元素:

wait documentsOut.AddAsync(new
  {
    id = sourceJson.id,
    storeName = sourceJson.storeName,
    invoiceTotal = sourceJson.invoiceTotal
  });

相关问题