容器具有一个称为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);
}
}
答案 0 :(得分:2)
发布为答案。
是的,您必须进行扇出查询,但每个分区键的ID都是唯一的,因此即使这样您也可能会遇到多个项目。坦白地说,如果您没有用于读取点的分区键,则数据库的模型不正确。它(或应用程序本身)应该重新设计。
另外。对于小型单分区集合,由于集合很小,因此此x分区查询不会太昂贵。但是,一旦数据库开始向外扩展,由于查询将扩展到越来越多的物理分区,这将变得越来越慢,而且成本也越来越高。如上所述,我强烈建议您修改应用程序以在请求中传递分区键值。这将使您能够进行单点读取操作,该操作非常快速且高效。
祝你好运。