DocumentDB Rest API - 为新文档创建文档需要的编号
问题描述:
我正在尝试使用DocumentDB Rest API创建一个新文档并为我自动生成编号。DocumentDB Rest API - 为新文档创建文档需要的编号
Create Document documentation表示id是body的必需属性,但是当输入中未提供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' }
答
我只注意到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);
}
答
DocumentDb支持两种寻址模式SelfLink(a.ka. RID)和AltLink(又名命名)。 SelfLink是由服务器生成的。 'id'属性是命名寻址的机会(例如:/ dbs/ToDoList/colls/items/docs/user1)。
SDK只是试图在UNIQ值不足的情况下填充它们。我强烈建议指定名称。