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