使用Java API将自定义文档写入Cosmos DB

时间:2020-10-13 08:53:11

标签: java azure-cosmosdb

我有一个Cosmos数据库,想向它写不同类型的文档。文档的结构是动态的,可以更改。

我尝试了以下方法。假设我有以下课程:

CosmosContainer _container = ...
CosmosDbItem dataToWrite = new CosmosDbItem("what-ever-id-18357", "{\"name\":\"Jane Doe\", \"age\":42}")
item = _cosmosContainer.createItem(dataToWrite, partitionKey, cosmosItemRequestOptions);

然后我可以使用如下JSON创建文档:

{
    "id": "what-ever-id-18357",
    "payload": "{\"name\":\"Jane Doe\", \"age\":42}",
    "_rid": "aaaaaaDaaAAAAAAAAAA==",
    "_self": "dbs/aaaaAA==/colls/aaaaAaaaDI=/docs/aaaaapaaaaaAAAAAAAAAA==/",
    "_etag": "\"6e00c443-0000-0700-0000-5f8499a70000\"",
    "_attachments": "attachments/",
    "_ts": 1602525607
}

这将产生这样的文档:

CosmosDbItem

在该文档中是否可以将有效负载生成为真正的JSON对象?我的{ "id": "what-ever-id-18357", "payload": { "name":"Jane Doe", "age":42 }, "_rid": "aaaaaaDaaAAAAAAAAAA==", "_self": "dbs/aaaaAA==/colls/aaaaAaaaDI=/docs/aaaaapaaaaaAAAAAAAAAA==/", "_etag": "\"6e00c443-0000-0700-0000-5f8499a70000\"", "_attachments": "attachments/", "_ts": 1602525607 } 类中需要更改什么?像这样:

{
    {
       ...
       id: 1,
       friends:[]
    },
    {
       ...
       id: 2,
       friends:[{id:xxx,...},...]
    },
    {
       ...
       id: 3,
       friends:[]
    },
}

1 个答案:

答案 0 :(得分:0)

这是我最终的解决方案。实际上,一旦我支持它,它就非常简单。我没有使用CosmosDbItem,而是使用了简单的HashMap<String, Object>

public void writeData() {
    ...
    Map<String, Object> stringObjectMap = buildDocumentMap("the-id-", "{\"key\":\"vale\"}");
    _cosmosContainer.createItem(stringObjectMap, partitionKey, cosmosItemRequestOptions);
    ...
  }
  
  public Map<String, Object> buildDocumentMap(String id, String jsonToUse) {
    JSONObject jsonObject = new JSONObject(jsonToUse);
    jsonObject.put("id", id);
    return jsonObject.toMap();
  }

这可以产生以下文档:

{
    "key": "value",
    "id": "the-id-",
    "_rid": "eaaaaaaaaaaaAAAAAAAAAA==",
    "_self": "dbs/eaaaAA==/colls/eaaaaaaaaaM=/docs/eaaaaaaaaaaaaaAAAAAAAA==/",
    "_etag": "\"3b0063ea-0000-0700-0000-5f804b3d0000\"",
    "_attachments": "attachments/",
    "_ts": 1602243389
}

一句话:在HashMap中设置id键很重要。否则会出现错误

"The input content is invalid because the required properties - 'id; ' - are missing"