如何使用 Microsoft.Azure.Cosmos v3.9.1 从 CosmosDb 读取单个项目

Mat*_*nks 5 c# azure-cosmosdb

我是第一次使用 CosmosDB,并且根据此文档,我尝试通过 id 读取单个文档:

https://learn.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.container.readitemasync?view=azure-dotnet

根据此文档,我的容器对象应该有一个ReadItemAsync可以用来查找和读取单个项目的方法。但是,当我将“Microsoft.Azure.Cosmos”nuget 包导入到我的项目并尝试使用此代码片段时,容器上没有ReadItemAsync. 这是我的代码片段:

    using Microsoft.Azure.Cosmos;
        ...
    var databaseId = "{databaseId}";
    var containerId = "{containerId}";
    var client = new CosmosClient(model.IndexDatabaseUri, model.IndexDatabasePrimaryKey);
    var database = client.GetDatabase(databaseId);
    var container = database.GetContainer(containerId);
    var call = container... // NO ReadItemAsync HERE
Run Code Online (Sandbox Code Playgroud)

我确实在容器上看到了这些功能:

    GetItemLinqQueryable
    GetItemQueryIterator
    GetItemQueryStreamIterator
Run Code Online (Sandbox Code Playgroud)

从它的外观来看,我可能可以使用自定义SELECT语句创建一个查询迭代器,并检索迭代器中的第一项。但这对于我想做的事情来说似乎有点过分了。在这种情况下我总是只想要一个项目。为什么这里没有ReadItemAsync方法,而文档中显示应该有一个方法?而且,如果“迭代器”是新的首选方法,那么使用 QueryIterator 与检索单个文档相比是否有任何性能考虑因素?该函数将在一天内运行数百万次。

ps - 我正在使用“Microsoft.Azure.Cosmos”nuget 包 v3.9.1

Mat*_*nta 3

如果您正在阅读 1 项并且知道id分区键,那么这是读取信息最快、最便宜(以 RU/s 计算)的方式。WHERE使用带有 the 的子句进行查询id会更昂贵。

我刚刚使用 3.9.1 创建了一个 NET Core 控制台应用程序,该方法就在那里,并且您指向的文档会根据 Nuget 包中的 DLL 自动生成。

在此输入图像描述