繁体   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