簡體   English   中英

天藍色documentdb創建文檔重復ID屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM