DocumentDB Rest API - 为新文档创建文档需求ID

时间:2017-08-14 23:11:34

标签: azure-cosmosdb

我正在尝试使用DocumentDB Rest API创建一个新文档并为我自动生成id。

Create Document documentation表示id是正文的必需属性,但是当输入中没有提供id时,node.js SDK和Azure Portal Document Explorer都将生成ID。

以下是服务器的响应:

{ code: 'BadRequest',
  message: 'Message: {"Errors":["The input content is invalid because the required properties - \'id; \' - are missing","The request payload is invalid. Ensure to provide a valid request pa
yload."]}\r\nActivityId: 6b718b3d-01bc-403f-82e6-266254aad952, Request URI: /apps/4c8d65d7-216b-46b4-abb7-52c1a0c7123f/services/0e58e0c6-ff02-4523-a94b-204abd0d2179/partitions/6bf7ec3e-d850
-440e-bbcb-50d949389f3e/replicas/131469737377192972p' }

2 个答案:

答案 0 :(得分:0)

我刚注意到DocumentDB node.js SDK生成了自己的id,这不是数据库处理的事情。

以下是他们用于生成唯一ID的代码,打包以供独立使用:

function generateGuidId () {
  var id = "";

  for (var i = 0; i < 8; i++) {
      id += getHexaDigit();
  }

  id += "-";

  for (var i = 0; i < 4; i++) {
      id += getHexaDigit();
  }

  id += "-";

  for (var i = 0; i < 4; i++) {
      id += getHexaDigit();
  }

  id += "-";

  for (var i = 0; i < 4; i++) {
      id += getHexaDigit();
  }

  id += "-";

  for (var i = 0; i < 12; i++) {
      id += getHexaDigit();
  }

  return id;

}

function getHexaDigit () {
  return Math.floor(Math.random() * 16).toString(16);
}

答案 1 :(得分:0)

DocumentDb支持两种寻址模式:SelfLink(a.ka.RID)和AltLink(命名为a.k.a.)。 SelfLink是服务器生成的。 'id'属性是命名寻址的机会(例如:/ dbs / ToDoList / colls / items / docs / user1)。

SDK只是尝试在不可用的情况下用UNIQ值填充它们。我强烈建议指定名称。