如何使用Node SDK检查cosmos DB中是否存在容器?

我要检查容器是否存在,如果不存在,则将其初始化。我希望是这样的:

const { endpoint, key, databaseId } = config;
const containerName = "container1"
const client = new CosmosClient({ endpoint ,key});
const containerDefinition = getContainerDefinition(containerName);
const db = await createDatabase(client, databaseId);
if (!db.containers.contains(containerName)
{
 // Do something
}

我没有使用";createIfNotExists&qot;的原因是我需要进行第二次调用,以检查返回的容器是否填充了项。我要创建的容器将保存设置数据,一旦容器初始创建,这些数据将是静电。此设置检查将针对每个请求进行,因此我希望尽可能减少数据库调用和操作。

我尝试了如下操作:

try
{
 db.container(containerName).read();
}
catch(err)
{
  if(err.message.contains("Resource Not Found"))
  {
    // do something
  }
}

但这似乎不是正确的做法。

如有任何帮助,我们将不胜感激!


解决方案

我不太清楚为什么需要这样做,因为通常在应用程序实例的生命周期中,您只需要做一次这样的事情。但我不建议这样做。

当您查询Cosmos以测试数据库、容器等是否存在时,这将命中该帐户的主分区。主分区有点像一个小型Cosmos数据库,其中包含您的所有帐户元数据。

此主分区分配了少量用于管理元数据操作的RU。因此,如果您的应用程序设计为针对每个请求进行这些类型的调用,则您的应用程序很可能会受到费率限制。

如果有某种方法可以设计它,使其不必查询容器是否存在,那么我会转而这样做。

相关文章