首页 > 解决方案 > 如何在我的 Cosmos Graph DB 中获取可用的 Graph 容器列表?

问题描述

我正在尝试获取我的 Cosmos Graph Database 的元数据信息。该数据库中创建了许多图表,我想列出这些图表名称。

在 Gremlin API 中,我们支持连接到任何 Graph DB 容器,然后我们可以提交查询,正如我在下面的代码示例中提到的那样。但是这里我们需要一个 {collection},它也是我们的 GraphName。所以不知何故,我们在这里被绑定到一个特定的图表。

                var gremlinServer = new GremlinServer(hostname, port, enableSsl: true,
                                    username: "/dbs/" + database + "/colls/" + collection,
                                    password: authKey);

                using (var gremlinClient = new GremlinClient(gremlinServer, new GraphSON2Reader(), new GraphSON2Writer(), GremlinClient.GraphSON2MimeType))
                {
                    gremlinClient.SubmitAsync(query);
                }

有什么方法可以让我们只连接到 GraphDB 并获取一些元数据信息?例如,就我而言,可用图表列表。

标签: .net-coreazure-cosmosdbazure-cosmosdb-gremlinapi

解决方案


看起来 Gremlin 客户端是在集合级别(即图形)实现的,因此无法使用 gremlin 连接从一个帐户/数据库中枚举图形。

您始终可以使用 CosmosDB SDK 连接到帐户并枚举数据库/集合,然后使用 Gremlin 客户端分别连接到它们中的每一个。

Install-Package Microsoft.Azure.Cosmos

using (var client = new CosmosClient(endpoint, authKey))
{
    var dbIterator = client.GetDatabaseQueryIterator<DatabaseProperties>();
    while(dbIterator.HasMoreResults)
    {
        foreach (var database in await dbIterator.ReadNextAsync())
        {
            var containerIterator = database.GetContainerQueryIterator<ContainerProperties>();
            while (containerIterator.HasMoreResults)
            {
                 foreach (var container in await containerIterator.ReadNextAsync())
                 {
                      Console.WriteLine($"{database.Id} - {container.Id}");
                 }
            }
        }
    }
}

推荐阅读