首页 > 解决方案 > 如何从 CosmosDB 中的现有容器中获取带有索引的 ContainerProperties

问题描述

我创建了一个具有容器属性的容器,其中ContainerProperties包含索引。

以后怎么ContainerProperties从宇宙取回来。我使用以下代码:

FeedIterator<ContainerProperties> resultSet = CosmosDatabase.GetContainerQueryIterator<ContainerProperties>( ($"select * from c where c.id = \"{collectionName}\"") );
FeedResponse<ContainerProperties> queryProperties = resultSet.ReadNextAsync().Result;

ContainerProperties containerProperties = queryProperties.Resource.ToList().FirstOrDefault()

有一个ContainerProperties并且名称填写正确,这就是我想要的,但是索引是空的。和containerProperties.IndexingPolicy.IncludedPathscontainerProperties.IndexingPolicy.ExcludedPaths 包含任何元素。但是当我创建它时,它确实如此。

标签: c#azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


从评论来看,您使用的是 SDK 的预览版,请更新到最新的 GA 版本,也就是3.0.0此时。

在该版本上,运行您共享的代码会返回一个ContainerProperties填充了 IndexingPolicy 的实例。

ContainerProperties containerDefinition = new ContainerProperties(new Guid().ToString(), "/id");
containerDefinition.IndexingPolicy.ExcludedPaths.Add(new Cosmos.ExcludedPath()
{
    Path = "/*"
});
ContainerResponse response = await cosmosDatabase.CreateContainerAsync(containerDefinition);
FeedIterator<ContainerProperties> resultSet = cosmosDatabase.GetContainerQueryIterator<ContainerProperties>(($"select * from c where c.id = \"{response.Container.Id}\""));
FeedResponse<ContainerProperties> queryProperties = resultSet.ReadNextAsync().Result;
ContainerProperties containerSettings = queryProperties.Resource.ToList().FirstOrDefault();
Assert.AreEqual(containerDefinition.IndexingPolicy.ExcludedPaths.First().Path, containerSettings.IndexingPolicy.ExcludedPaths.First().Path);

推荐阅读