如何在我的 Cosmos Graph DB 中获取可用的 Graph 容器列表?

How to get available Graph container list in my Cosmos Graph DB?

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

在 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 并获取一些元数据信息吗?例如,在我的例子中,可用图表列表。

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

您始终可以使用 CosmosDB SDK 连接到帐户并枚举 databases/collections,然后使用 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}");
                 }
            }
        }
    }
}