问题标签 [azure-cosmosdb-sqlapi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2704 浏览

azure-cosmosdb - 嵌套对象子级的 Cosmos DB SQL API 查询

我想找到一种更好的方法来搜索集合中的文档是否具有数组中包含超过 0 个元素的属性,即任何不为空的元素。

第一个数组长度有效。当我在其他地方阅读时,仅使用此点符号添加第二个不起作用。我怎样才能确保我能做到这一点。孙子将是从 0 到数组长度大于 0 的多个数字。

如果需要更多说明,请告诉我。

0 投票
1 回答
1582 浏览

api - CosmosDB 中的 NULL 继续令牌

我知道如果继续令牌为空(整个令牌 json 为空),这意味着下一个请求中将没有更多数据

就我而言,我检查了下一页中肯定没有更多数据,并且令牌应该为空。但它返回这个“半”空令牌......

令牌看起来像这样:

"{\"token\":null,\"range\":{\"min\":\"xxxxxxxxxx\",\"max\":\"xxxxxxxxxx\"}}"

只有token为null,但min又不为maxnull,这说明什么?换句话说,我应该使用continuation == null还是continuation.token == null查看下一页是否有更多数据?

0 投票
1 回答
123 浏览

azure-cosmosdb - 未强制执行具有 ResourcePartitionKey 的 CosmosDB UserPermission

我正在尝试使用对用户权限的附加 ResourcePartitionKey 限制来实现此CosmosDB 文档中描述的行为,以将资源令牌限制为仅访问属于指定分区键的文档,但是我无法使其工作。

使用 SQL REST API,我在使用 resourcepartitionkey 密钥对创建 UserPermission 对象的 POST 中没有收到任何错误,并且初始返回的对象以及后续 GET 也显示在获取资源令牌时存在的“resourcepartitionkey”。

针对权限中指定的适当集合使用资源令牌,我可以列出集合中的所有文档。当使用“x-ms-documentdb-partitionkey”标头时,我可以定位任何我喜欢的分区键。如果没有“x-ms-documentdb-partitionkey”标头,它只会返回整个集合。

该集合是一个全新的、无限制的 1000 RU,分区键为“/rpk”。集合的创建后查询显示分区键配置如下

以下是创建期间返回的用户权限,显示“resourcepartitionkey”存在

以下是使用上述资源令牌的文档请求。我希望这会失败,因为针对分区集合缺少“x-ms-documentdb-partitionkey”标头,但它都成功并继续从集合中的所有分区键返回记录(我的测试数据集中只有 2 个)

来自上述请求的响应正文显示来自分区键 rpk1 和 rpk2 的文档,即使用户权限配置为 rpk1。

我假设我错过了一些明显的东西,或者在 UserPermission 中为“resourcepartitionkey”使用了不正确的值,但我无法确定是什么。任何想法都非常感谢。

0 投票
1 回答
730 浏览

azure - Azure CosmosDB 延续令牌结构

我阅读了很多关于 CosmosDB 分页的文档,并认为令牌应该看起来像这样:

{\"token\":\"xxxxxx\",\"range\":{\"min\":\"xxxxxxxxxx\",\"max\":\"xxxxxxxxxx\"}}

但我得到了一个看起来像这样的令牌:

[{\"compositeToken\":{\"token\":\"xxxxxxxxx\",\"range\":{\"min\":\"\",\"max\":\"05C1B9CD673390\" }},\"orderByItems\":[{\"item\":24}],\"rid\":\"duJVAIns+3N6AAAAAAAAAA==\",\"skipCount\":0,\"filter\" :无效的}]

我想知道令牌在什么情况下会有compositeToken

0 投票
2 回答
3584 浏览

.net - Azure Cosmos DB - 删除整个分区

我对 cosmos Db 非常陌生,并且需要删除一个完整的分区。在进行简短研究时,我发现删除分区不是一回事。因此,我偶然发现了以下链接,该链接是用于批量删除的存储过程

https://github.com/Azure/azure-cosmosdb-js-server/blob/master/samples/stored-procedures/bulkDelete.js

我在我的集​​合上创建了这个存储过程并单击了“执行”。我收到以下提示

在此处输入图像描述

我输入了分区键和输入参数以“从 c 中选择 *”。但是,我可以看到一次只删除了 38 个文档,并且查询成功完成。是否有任何设置迫使存储过程过早停止?

0 投票
1 回答
519 浏览

sql - 如何使用 SQL CONTAINS 查询 Cosmos DB 图

我有一个 Cosmo DB 图,我想在其中使用与 Cosmos DB 中的 CONTAINS 匹配的字符串访问表达式中的“名称”字段。CONTAINS 在匹配 CONATINS 的 1 级工作

  1. SELECT s.label, s.name FROM s WHERE CONTAINS(LOWER(s.name._value), "cara") AND s.label = "site"

我也尝试过使用 UDF 函数

  1. SELECT s.label, s.name FROM s WHERE(s.label = 'site' AND udf.strContains(s.name._value, '/cara/i'))

我没有从 Cosmos DB 中得到任何命中或语法错误,即使在此示例中至少应该是一条记录。有人有提示吗?提前致谢

0 投票
1 回答
43 浏览

azure - 向上/向下扩展集合的“收支平衡”点在哪里

在启动大型写入或批量导入之前,我一直在考虑扩大我的收藏。

但是令我震惊的是,我不知道执行缩放操作需要多少 RU。与仅将其保持在恒定水平相比,扩展、执行和缩减的成本可能会更高。

自然地,人们担心写入之间的时间间隔、过程需要多长时间等,但如果不知道扩展成本,我就无法真正解决这个问题。我很好奇是否有人有他们用来控制这一点的政策或经验法则。

0 投票
1 回答
550 浏览

azure-cosmosdb - 地理分片键 + Cosmos DB

我尝试在 CosmosDB 中创建一个集合,但我不知道如何创建一个好的 shardkey!

我有类似的想法,但它不接受我的 shard-key !

有人有这方面的经验吗?

0 投票
2 回答
551 浏览

azure-cosmosdb - 在 CosmosDB 中创建文档时 disableAutomaticIdGeneration 是否有性能优势?

使用 .Net Core SDK 在 CosmosDB 中创建文档时,可以选择禁用自动生成文档 ID。这将允许开发人员为属性设置自己的值,id如果未设置,则会引发异常。

例如,这两种方法都显示在这里:

我正在编写一个创建大量文档的应用程序,我想优化吞吐量和 RU(请求单元)成本。

禁用自动 ID 生成并改为在代码中生成 ID 是否有益于性能或成本?

0 投票
1 回答
964 浏览

azure-cosmosdb - 确定 Cosmos DB NotFound 是否由于缺少集合与文档

有没有办法以编程方式从DocumentClientException哪里StatusCode == HttpStatusCode.NotFound确定是找不到文档、集合还是数据库?

我试图弄清楚我是否可以实现按需集合配置并且只DocumentClient.CreateDocumentCollectionIfNotExistsAsync在需要时调用。我试图避免在发出每个请求之前调用它(大概这会为每个请求增加额外的网络往返)。同样,当我知道它无济于事时,我试图避免在错误恢复时调用它。

通过对本地模拟器的实验,我看到在这三种情况下唯一不同的字段是DocumentClientException.Error.Message,并且仅在无法找到数据库时。我通常会尽量避免基于人类可读消息的异常分派。

错误的数据库名称:

  • StatusCodeHttpStatusCode.NotFound
  • Error.Message{\"Errors\":[\"Owner resource does not exist\"]}...

正确的数据库名称,错误的集合名称:

  • StatusCodeHttpStatusCode.NotFound
  • Error.Message{\"Errors\":[\"Resource Not Found\"]}...

正确的数据库名称、正确的集合名称、错误的文档 ID:

  • StatusCodeHttpStatusCode.NotFound
  • Error.Message{\"Errors\":[\"Resource Not Found\"]}...

我打算使用带有自己报价的数据库。由于具有自己报价的数据库中的集合很便宜,因此我正在尝试查看是否可以将多租户应用程序中的每个租户隔离到其自己的集合中。每个租户最终都有不同的索引和默认 TTL 策略。这组集合不是固定的,并且在运行时随着新租户的注册而动态变化。我无法预测何时需要添加新系列。没有新的租户通知:我只是收到一个需要通过在可能不存在的集合中创建文档来处理的请求。有一个垃圾收集未使用的集合的过程。

我在针对 SQL API Cosmos DB 实例的 .NET Core 2.1 应用程序中使用 NuGet 包 Microsoft.Azure.DocumentDB.Core 版本 1.9.1。