【问题标题】:Cosmos DB alter collectionCosmos DB 变更集合
【发布时间】:2019-04-22 20:24:08
【问题描述】:

我对 Azure 还很陌生,所以这个问题对某些人来说可能听起来有点傻,对此深表歉意!实际上,我有一个要求,我需要更改现有 cosmos db 集合的结构以适应一个附加属性。如何使用存储过程来做到这一点?现在,我的场景有点像我有一个现有的集合,其中大约有 60 个文档,并且相同的集合也存在于其他环境中。我需要向集合结构中添加一个属性,理想情况下它应该是一次性活动。

我已经检查了Adding a new property to Cosmos DB,但与此不同的是,我的要求不是通过代码(C#)更新集合,而是通过我所说的 SP。现在,由于除了 Cosmos DB 的 SELECT 查询之外我们不能使用任何东西,我如何在下面的代码 sn-p 中使用 ALTER 文档功能?

function updateDocument(documentName){
    var collection = getContext().getCollection();
    var response = getContext().getResponse();
    collection.queryDocuments(

     // ALTER document code goes here

    );
}

【问题讨论】:

  • 为什么不来自 c#?
  • 因为它(更新现有的集合结构)是我需要做的一次性更改
  • @Deblina - 请查看发布的答案:您无法通过 Cosmos DB SQL 执行更新。
  • 是的@David 我明白了..我已经更新了我的问题以使我的要求更清楚..请看一下
  • 使用 c# 不是一个限制因素,它取决于您使用什么编码。您可以在几分钟内完成批量更新,然后使用“ActionBlock”之类的东西将它全部多线程化,这样您就可以在很短的时间内更新大量数据(我在任何大型更新之前启动 RU)。但是,我想我也应该学会在函数中做这些事情:)

标签: javascript asp.net azure azure-cosmosdb


【解决方案1】:

Cosmos DB 是一个无模式 NoSQL 数据库。每个文档彼此完全独立,不需要您更改任何内容即可添加新属性。您可以直接进入门户并通过 SDK 或存储过程以编程方式进行操作。

Cosmos DB 中的 SQL 查询无法更改集合中的文档。只能用于查询。

存储过程可以更改文档,但它需要您先阅读文档,然后再更新它。请记住,它们可以针对单个逻辑分区执行。

我强烈建议您阅读有关 CosmosDB 的更多信息,因为听起来您并不完全了解它是什么。

您可以从这里开始:https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-get-started

【讨论】:

  • 使用存储过程如何更新文档?我已经更新了我的问题,以使我的要求更加清晰。请看一下
  • @Deblina 有多个示例可以准确地解释如何做到这一点。 CosmsoDB 存储的 proc repo 充满了它们。
【解决方案2】:

首先:无论是在文档级别还是在集合级别,都没有强制架构。存储您想要的任何文档属性。

关于更新文档:Core (SQL) API 仅通过 SQL 提供查询(例如SELECT 语句)。对于创建、更新或删除,您必须使用 API / SDK 调用。

【讨论】:

  • 但是@David,如果我不想使用 API / SDK 调用怎么办?我的场景就像我有一个现有的集合,其中大约有 60 个文档,并且相同的集合也存在于其他环境中。我需要向集合结构中添加一个属性,理想情况下它应该是一次性活动,对吧?
猜你喜欢
  • 2021-05-06
  • 2018-06-02
  • 2018-03-30
  • 1970-01-01
  • 2021-12-01
  • 2018-10-12
  • 2019-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多