ReadItemAsync Cosmos DB
ReadItemAsync Cosmos DB
我有一个包含以下字段(id、类别、类型)的 cosmos 数据库容器。
分区键是 Category。在使用 Below 查询时,我还需要传递分区键。
但我只有 ID 值。如何使用 ReadItemAsync 执行操作?。我找不到错误。
private async Task<T> GetItem(string id)
{
ItemResponse<T> response = await this.MainContainer.ReadItemAsync<T>(id, new PartitionKey(id));
return response.Resource;
}
如果不知道分区键值,可以用GetItemQueryable
代替:
public T GetItemAsync(string id)
{
IQueryable<T> queryable = container.GetItemLinqQueryable<T>(true);
queryable = queryable.Where<T>(item => item.Id == id);
return queryable.ToArray().FirstOrDefault();
}
如果您只有该项目的 ID 并且这是一个高容量查询,您可能想要探索一个新的分区策略用于此容器。但是,如果还有大量使用类别的读取,您可以考虑使用更改源来保留数据的两个副本,并找到另一个可以用作分区键的 属性。如果 id 在您的应用程序中是全局唯一的,那么也可以使用它。
我有一个包含以下字段(id、类别、类型)的 cosmos 数据库容器。 分区键是 Category。在使用 Below 查询时,我还需要传递分区键。 但我只有 ID 值。如何使用 ReadItemAsync 执行操作?。我找不到错误。
private async Task<T> GetItem(string id)
{
ItemResponse<T> response = await this.MainContainer.ReadItemAsync<T>(id, new PartitionKey(id));
return response.Resource;
}
如果不知道分区键值,可以用GetItemQueryable
代替:
public T GetItemAsync(string id)
{
IQueryable<T> queryable = container.GetItemLinqQueryable<T>(true);
queryable = queryable.Where<T>(item => item.Id == id);
return queryable.ToArray().FirstOrDefault();
}
如果您只有该项目的 ID 并且这是一个高容量查询,您可能想要探索一个新的分区策略用于此容器。但是,如果还有大量使用类别的读取,您可以考虑使用更改源来保留数据的两个副本,并找到另一个可以用作分区键的 属性。如果 id 在您的应用程序中是全局唯一的,那么也可以使用它。