📜  cosmos db 获取容器中的所有项目 - C# (1)

📅  最后修改于: 2023-12-03 15:14:15.608000             🧑  作者: Mango

Cosmos DB 获取容器中的所有项目 - C#

Cosmos DB 是微软开发的分布式数据库,可在云端和本地部署中使用。本文将探讨如何使用 C# 从 Cosmos DB 中获取容器中的所有项目。

步骤
步骤1. 准备工作

在开始编写代码之前,您需要完成以下准备工作:

  • 创建 Cosmos DB 帐户
  • 创建数据库和容器
步骤2. 引用 Cosmos DB SDK

在 Visual Studio 中,创建一个新项目并引用 Microsoft.Azure.Cosmos NuGet 包。

using Microsoft.Azure.Cosmos;
步骤3. 创建 Cosmos Client 实例

在程序中创建 Cosmos Client 实例,并初始化数据库和容器。

string connectionString = "connectionString";
string databaseName = "databaseName";
string containerName = "containerName";

CosmosClient cosmosClient = new CosmosClient(connectionString);
Database database = await this.cosmosClient.CreateDatabaseIfNotExistsAsync(databaseName);
Container container = await this.database.CreateContainerIfNotExistsAsync(containerName, "/partitionKey");

注意,这里更新了容器的分区键。如果您的容器中已经有数据,更新分区键将导致数据迁移。

步骤4. 获取容器中的所有项目

使用 CosmosContainer.GetItemQueryIterator<T> 方法来获取容器中的所有项目。

List<T> items = new List<T>();
string query = "SELECT * FROM c";

using (FeedIterator<T> resultSet = container.GetItemQueryIterator<T>(query))
{
    while (resultSet.HasMoreResults)
    {
        FeedResponse<T> response = await resultSet.ReadNextAsync();
        items.AddRange(response.ToList());
    }
}

此代码段将执行 SQL 查询,并将查询结果添加到列表 items 中。

完整代码

您可以使用以下代码来获取容器中的所有项目:

using Microsoft.Azure.Cosmos;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public class CosmosHelper<T> where T : class
{
    private readonly string connectionString;
    private readonly string databaseName;
    private readonly string containerName;
    private readonly CosmosClient cosmosClient;
    private readonly Database database;
    private readonly Container container;

    public CosmosHelper(string connectionString, string databaseName, string containerName)
    {
        this.connectionString = connectionString;
        this.databaseName = databaseName;
        this.containerName = containerName;

        this.cosmosClient = new CosmosClient(this.connectionString);
        this.database = this.cosmosClient.CreateDatabaseIfNotExistsAsync(this.databaseName).GetAwaiter().GetResult();
        this.container = this.database.CreateContainerIfNotExistsAsync(this.containerName, "/partitionKey").GetAwaiter().GetResult();
    }

    public async Task<List<T>> GetAllitemsAsync()
    {
        List<T> items = new List<T>();
        string query = "SELECT * FROM c";

        using (FeedIterator<T> resultSet = this.container.GetItemQueryIterator<T>(query))
        {
            while (resultSet.HasMoreResults)
            {
                FeedResponse<T> response = await resultSet.ReadNextAsync();
                items.AddRange(response.ToList());
            }
        }

        return items;
    }
}
总结

本文介绍了如何使用 Cosmos DB SDK 从容器中获取所有项目。请注意,如果您的容器中已经有数据,更新分区键将导致数据迁移。