Cosmos DB读取没有分区键的单个文档

时间:2020-07-09 15:37:35

标签: azure-cosmosdb azure-cosmosdb-sqlapi

容器具有一个称为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);
    }
}

1 个答案:

答案 0 :(得分:2)

发布为答案。

是的,您必须进行扇出查询,但每个分区键的ID都是唯一的,因此即使这样您也可能会遇到多个项目。坦白地说,如果您没有用于读取点的分区键,则数据库的模型不正确。它(或应用程序本身)应该重新设计。

另外。对于小型单分区集合,由于集合很小,因此此x分区查询不会太昂贵。但是,一旦数据库开始向外扩展,由于查询将扩展到越来越多的物理分区,这将变得越来越慢,而且成本也越来越高。如上所述,我强烈建议您修改应用程序以在请求中传递分区键值。这将使您能够进行单点读取操作,该操作非常快速且高效。

祝你好运。