我查询文档并将其发送到我的Angular应用程序。然后,我编辑模型并将其发送回去。我的问题是只能从模型更新文档吗? Document没有任何构造函数,而ReplaceDocumentAsync需要Document吗?还是我必须先查询文档只是为了得到相同的对象,然后我才需要编辑?
public void Put([FromBody] VesselView vessel)
{
var collectionLink = UriFactory.CreateDocumentCollectionUri("AssetControl", "Vessels");
_cosmosDocClient.ReplaceDocumentAsync(vessel);
}
答案 0 :(得分:0)
您需要首先检索原始文档。它包含内部属性,例如public class User implements Serializable {
...
@ManyToMany(fetch = FetchType.LAZY)
private List<User> followers;
...
}
(用于并发检查),否则将无法使用。
答案 1 :(得分:0)
是的。。您只需要知道要替换的文档id
。
已通过.Net客户端Microsoft.Azure.DocumentDB v2.2.1。进行了测试。
以JObject
传递预期的新文档可以实现此目的。您可以为此使用任何Json序列化器。另外,请注意,您的模型不必包含内部文档字段,例如_rid
,_ts
等
示例代码:
var client = new DocumentClient(url, key, policy);
var documentUri = UriFactory.CreateDocumentUri("myDB", "myCollection", "_replaceTest");
var newModel = JObject.Parse(@"{""id"": ""_replaceTest"", ""myData"": ""replaced!""}");
var response = await client.ReplaceDocumentAsync(documentUri, newModel);
var fromStorage = response.Resource;
返回的模型是包含额外模型字段的完整模型:
{
"id": "_replaceTest",
"_rid": "FOOBAR==",
"_self": "dbs/FOO==/colls/BAR=/docs/FOOBAR==/",
"_ts": 1550491238,
"_etag": "\"0000e379-0000-0000-0000-5c6a9e660000\"",
"myData": "replaced!"
}
很明显,正如David Makogon所暗示的那样,除非您将此属性包括在发送给DocumentDB的模型中,否则您不能依靠_etag
进行这种检查。