📅  最后修改于: 2023-12-03 15:14:15.608000             🧑  作者: Mango
Cosmos DB 是微软开发的分布式数据库,可在云端和本地部署中使用。本文将探讨如何使用 C# 从 Cosmos DB 中获取容器中的所有项目。
在开始编写代码之前,您需要完成以下准备工作:
在 Visual Studio 中,创建一个新项目并引用 Microsoft.Azure.Cosmos NuGet 包。
using Microsoft.Azure.Cosmos;
在程序中创建 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");
注意,这里更新了容器的分区键。如果您的容器中已经有数据,更新分区键将导致数据迁移。
使用 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 从容器中获取所有项目。请注意,如果您的容器中已经有数据,更新分区键将导致数据迁移。