gpt4 book ai didi

c# - 如何查询特定类型,然后获取底层文档

转载 作者:行者123 更新时间:2023-12-02 07:26:35 24 4
gpt4 key购买 nike

我想做的是按特定文档类型进行查询

MyType foo = client.CreateDocumentQuery<MyType>(documentCollectionUri)
.ToList()
.FirstOrDefault(d => d.SomeProperty == someProperty);

然后用另一个文档替换该文档。看起来唯一可用的方法是

public Task<ResourceResponse<Document>> ReplaceDocumentAsync(Uri documentUri, object document, RequestOptions options = null);

public Task<ResourceResponse<Document>> ReplaceDocumentAsync(Document document, RequestOptions options = null);

public Task<ResourceResponse<Document>> ReplaceDocumentAsync(string documentLink, object document, RequestOptions options = null);

所有这些都需要文档或其id

那么,如何从 foo 获取这些值?不可能吗?

最佳答案

首先,您表达问题的方式不太清楚。

MyType foo = client.CreateDocumentQuery<MyType>(documentCollectionUri)
.ToList()
.FirstOrDefault(d => d.SomeProperty == someProperty);

如果您在同一问题中存储多个不同类型的对象,则使用 T 参数 MyType 并不能保证您将得到的结果仅为 MyType 结果,但任何与表达式匹配的内容都将被映射并作为 MyType 返回。 CosmosDB SDK 中没有其他过滤可以保证查询仅发生在该类型的对象上,因为 CosmosDB 没有该类型的上下文。

使用 ReplaceDocumentAsync 方法执行此操作的唯一可靠方法是(正如 Alex AIT 所说)使用 [JsonProperty("id")] 对象上的属性。考虑到它是一个 DTO 而不是 Domain 对象,这个属性应该存在,并且它将真正有助于其他功能,例如删除等。

我强烈建议查看Cosmonaut这是一个 CosmosDB ORM,它还处理基于类型的集合共享以及您试图实现的相同查询和更新,而不必困惑任何此类逻辑。

免责声明:我是 Cosmonaut 的创建者

顺便说一句,您不应在使用 CreateDocumentQuery 创建的 IQueryable 上使用 ToList(),而应使用 .AsDocumentQuery()方法,然后结合使用 while(query.HasMoreResults)query.ExecuteNextAsync() 方法来正确使用分页 CosmosDB 功能。

关于c# - 如何查询特定类型,然后获取底层文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com