我正在尝试编写一些预插入触发器(为集合中的每个文档生成数字ID),注册它并使用DocumentDB .NET SDK运行。我正在使用DocumentDB模拟器来测试我的代码
function generateNumericId() {
var counterDocumentId = 'numericIdCounter';
var counterDocumentLink = __.getSelfLink() + 'docs/' + counterDocumentId;
__.readDocument(counterDocumentLink, {},
function(err, counterDocument) {
if (err) throw new Error("Can't find counterDocument!");
counterDocument.value += 1;
__.upsertDocument(counterDocumentLink, counterDocument);
var docToCreate = __.request.getBody();
docToCreate.id = counterDocument.value.toString();
__.request.setBody(docToCreate);
});}
我的.net代码注册成功,但是当我正在运行插入操作时 它失败并显示“Error creating request message”异常。那么,请告诉我我的代码有什么问题? (!重要提示:我已经在集合中有了numericIdCounter文档,js代码在readDocument函数中失败了!)
答案 0 :(得分:3)
第一个错误:__.getSelfLink()
=> __.getAltLink()
因为getSelfLink()
提供了从内部_id
字段构建的路径(对我们来说不合适 - 我们只知道计数器id
,而不是内部_id
)。 getAltLink()
允许我们构建以下网址:dbs/mydb/colls/mycoll/docs/numericIdCounter
而不是dbs/dLIxAA==/colls/dLIxAOFiYAA=/docs/dLIxAOFiYAABAAAAAAAAAA==/
。
第二个错误:__.upsertDocument(counterDocumentLink, counterDocument);
=>在检查api文档之后__.upsertDocument(__.getAltLink(), counterDocument);
。