我最近意识到DocumentDB通过ReplaceDocumentAsync支持独立更新操作。
我已使用Replace操作替换了下面的Upsert操作。
oncomplete="afterOrderBy(this)"
现在就是这样:
var result = _client
.UpsertDocumentAsync(_collectionUri, docObject)
.Result;
然而,现在我得到了例外:
Microsoft.Azure.Documents.BadRequestException:ResourceType Document是意外的。 ActivityId:b1b2fd71-3029-4d0d-bd5d-87d8d0a2fc95
不知道为什么,upsert和replace是相同的,并且对象与upsert相同,所以我希望它可以毫无问题地工作。
所有帮助表示赞赏。
由于
更新:尝试使用SelfLink方法实现此功能,并且适用于替换,但自身链接不适用于Upsert。这种行为令人困惑。我不喜欢我必须使用字符串连接在代码中构建自我链接。
答案 0 :(得分:3)
我担心使用字符串连接构建自链接是您唯一的选择,因为{{1}}需要指向文档的链接。您在示例中显示了该集合的链接。它不会吮吸id并找到你想要的文件。
NPM模块documentdb-utils具有用于构建这些链接的库函数,但它只是使用字符串连接。我见过.NET的等效库,但我不记得在哪里。也许它现在是在Azure示例中,甚至在SDK中。
答案 1 :(得分:3)
您可以使用UriFactory帮助程序类为<替换构建文档链接:
var result = _client
.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(databaseId, collectionId, docObject.Id), docObject)
.Result;
不幸的是,它并不是非常直观,正如拉里已经指出的那样,但是替换者希望文档已经存在,而一个upts就是它所说的。我会说两种不同的用例。
答案 2 :(得分:2)
要更新文档,您需要提供Collection Uri。如果您提供Document Uri,则返回以下内容:
ResourceType文档是意外的。
也许_collectionUri是一个Document Uri,赋值应该是这样的:
_collectionUri = UriFactory.CreateDocumentCollectionUri(DatabaseName, CollectionName);