kis*_*ore 1 c# azure azure-cosmosdb
我的文档中有以下结果.我想更新"类型"和"锻炼"的属性值,这样它不会影响其他值
"PartyId": 10114795,
"WorkoutId": 4,
"Type": "heart-rate-zone-target",
"DateStarted": "2016-02-05T18:14:15.1620890Z",
"id": "0c44d1ee-58b8-4083-a702-f770ba0e63e9",
"_rid": "0ThoANQ4YwEEAAAAAAAAAA==",
"_self": "dbs/0ThoAA==/colls/0ThoANQ4YwE=/docs/0ThoANQ4YwEEAAAAAAAAAA==/",
"_etag": "\"08000130-0000-0000-0000-58dd72da0000\"",
"_attachments": "attachments/",
"_ts": 1490907866
Run Code Online (Sandbox Code Playgroud)
我想更新"类型"和"锻炼"的属性值,这样它不会影响其他值.
我做了一个只是更新指定属性的演示.以下是我的详细步骤:
1.创建C#控制台项目并引用Azure DocumentDB SDK
2.添加TestModel类
public class TestModel
{
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
// used to set expiration policy
[JsonProperty(PropertyName = "ttl", NullValueHandling = NullValueHandling.Ignore)]
public int? TimeToLive { get; set; }
public string PartyId { get; set; }
public string Type { get; set; }
public DateTime DateStarted { get; set; }
public int WorkoutId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
3.将文档添加到集合中
private static readonly string databaseName = "tomtest";
private static readonly string collectionName = "colltest";
// Read config
private static readonly string endpointUrl = ConfigurationManager.AppSettings["EndPointUrl"];
private static readonly string authorizationKey = ConfigurationManager.AppSettings["AuthorizationKey"];
var client = new DocumentClient(new Uri(endpointUrl),authorizationKey);
Console.WriteLine();
Console.WriteLine("**** Create Documents ****");
Console.WriteLine();
var document1Definition = new TestModel
{
Id= Guid.NewGuid().ToString(),
PartyId = "10114795",
Type = "heart-rate-zone-target",
DateStarted = DateTime.Now,
WorkoutId = 4
};
var database = client.CreateDatabaseIfNotExistsAsync(new Database {Id = databaseName}).Result.Resource;
var collection = client.CreateDocumentCollectionIfNotExistsAsync(
UriFactory.CreateDatabaseUri(databaseName), new DocumentCollection
{
Id = collectionName
}).Result.Resource;
//create document
var createdocument = client.CreateDocumentAsync(collection.SelfLink, document1Definition).Result.Resource;
Run Code Online (Sandbox Code Playgroud)
4.从Azure门户检查结果
5.查询创建的文档
//query document
var querydoc = client.CreateDocumentQuery<TestModel>(
UriFactory.CreateDocumentCollectionUri(databaseName, collectionName))
.Where(x => x.PartyId == "10114795")
.AsEnumerable()
.First();
Run Code Online (Sandbox Code Playgroud)
6.更新文档.
//update document
querydoc.Type = "updateType";
querydoc.WorkoutId = 0;
var result = client.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(databaseName, collectionName, querydoc.Id), querydoc).Result.Resource;
Console.WriteLine(result);
Console.WriteLine($"Update document Type :{ result.GetPropertyValue<string>("Type")} , WorkoutId:{result.GetPropertyValue<int>("WorkoutId")}");
Run Code Online (Sandbox Code Playgroud)
7.从Azure门户和控制台进行检查.
Packages.config
<packages>
<package id="Microsoft.Azure.DocumentDB" version="1.13.1" targetFramework="net451" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net451" />
</packages>
Run Code Online (Sandbox Code Playgroud)
不幸的是,部分更新尚未实施。您可以在https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/6693091-be-able-to-do-partial-updates-on-document跟踪该过程
因此,正如 Tom Sun 提到的,您可以首先从 Cosmos DB 检索所需的文档,更新属性并替换为旧的。
//Fetch the Document to be updated
Document doc = client.CreateDocumentQuery<Document>(collectionLink)
.Where(r => r.Id == "doc id")
.AsEnumerable()
.SingleOrDefault();
//Update some properties on the found resource
doc.SetPropertyValue("MyProperty", "updated value");
//Now persist these changes to the database by replacing the original resource
Document updated = await client.ReplaceDocumentAsync(doc);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7414 次 |
| 最近记录: |