容器有一个名为 ReadItemAsync 的函数。问题是我没有分区键,只有文档的 ID。那么获得单个物品的最佳方法是什么?
我必须从收藏中获取它吗?喜欢:
var allItemsQuery = VesselContainer.GetItemQueryIterator<CoachVessel>("SELECT * FROM c where c.id=....");
var q = VesselContainer.GetItemLinqQueryable<CoachVessel>();
var iterator = q.ToFeedIterator();
var result = new List<CoachVessel>();
while (iterator.HasMoreResults)
{
foreach (var item in await iterator.ReadNextAsync())
{
result.Add(item);
}
}
发布为答案。
是的,您必须执行扇出查询,但 id 仅每个分区键不同,因此即使如此,您最终也可能会得到多个项目。坦率地说,如果您没有读取点的分区键,则数据库的模型不正确。它(或应用程序本身)应该重新设计。
另外。对于小型的单分区集合,此 x 分区查询不会太昂贵,因为集合很小。然而,一旦数据库开始横向扩展,速度就会变得越来越慢,而且成本也会越来越高,因为查询将分散到越来越多的物理分区。如上所述,我强烈建议您修改应用程序以在请求中传递分区键值。这将允许您执行非常快速且高效的单点读取操作。
祝你好运。
尝试使用
ReadItemAsync
,例如:
dynamic log = await container.ReadItemAsync<dynamic>(ID, PartitionKey.None);