[英]azure documentdb create document duplicates Id property
我想將以下對象存儲在azure documentdb中
public class MyDocument
{
public string Id { get; set; }
public SomeOtherClass SomeOtherClass { get; set; }
}
屬性ID是一個時間戳(yyyyMMddHHmmss),后跟一個GUID。 作為副作用,這使我可以對ID進行排序。 我用這個調用來存儲它:
await docDbClient.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(db, coll), myDoc);
存儲文檔時,它具有我的文檔屬性(Id和SomeOtherClass)和一個附加的"id"
屬性(請注意小寫的“ i”)。 (以及documentdb使用的其他一些技術屬性)。 這充滿了向導。
據我了解,通過存儲已經具有Id
屬性的對象,documentdb將使用此屬性而不生成它自己的屬性(但是確實如此!)。
現在我有兩個問題:我無法與
await docDbClient.ReadDocumentAsync(UriFactory.CreateDocumentCollectionUri(db, coll), myDoc.Id);
來查看文檔是否已經存在,並且我無法使用Id屬性對這樣的查詢中的文檔進行排序和比較:
IQueryable<MyDocument> query = _client.CreateDocumentQuery<MyDocument>(
UriFactory.CreateDocumentCollectionUri(_account.Database, _account.Collection), queryOptions);
query = query.Where(x => x.Id.CompareTo(inputValue) >= 0);
其中inputValue是另一種具有相同形式的鍵,用於分頁。 因為當從documentdb中反序列化對象時, id
屬性將替換我的Id
屬性,而我再也看不到它的原始值。
我使用這個錯誤嗎? 我是否錯誤地假設將使用我的Id屬性代替小寫的自動生成的屬性?
編輯:我可以確認在Id
屬性上使用[JsonProperty("id")]
時已解決此問題。 但是已經插入的任何文檔我無法獲取我的Id
原始值
ID字段應為“ id”小寫。
這可以解決它:
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
DocumentDB的id
屬性必須是唯一的。 您自己的Id
屬性(大寫的I)不是特殊屬性-而是...您創建的屬性。
您已經在id
屬性中看到了自動生成的Guid。 請注意,您可以將自己的值放在id
,只要它是唯一的即可。 您不必接受默認值(guid)。
CosmosDb僅保證同一分區鍵的唯一id
字段值。 因此,這可以存在於同一集合中:
{
"id": "12345",
"myPartitionKey": "A",
...
},
{
"id": "12345",
"myPartitionKey": "B", //different partition key than above
...
},
但這不存在:
{
"id": "12345",
"myPartitionKey": "A",
...
},
{
"id": "12345",
"myPartitionKey": "A", // Inconceivable! Same id AND partition key as above
...
},
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.