cosmos SQL是否支持使用AltLink进行查询的方法?

时间:2019-04-11 13:45:36

标签: azure-cosmosdb azure-cosmosdb-sqlapi

我想知道是否可以使用AltLink而不是SelfLink进行查询?

SELECT * FROM c
--WHERE c._alt = 'dbs/DefaultDb/colls/DefaultColl/docs/cd9d67d5-b82e-4ec5-aad3-91e784906f6e'
WHERE c._self = 'dbs/Rr4MAA==/colls/Rr4MAOW90GI=/docs/Rr4MAOW90GIBAAAAAAAAAA==/'

更新:

我之所以寻求在SQL中使用AltLink的方法的原因是由于通过其ID对文档进行简单查询的问题,随着集合的增长,其成本将持续增长。 .net SDK在哪里允许使用AltLink来获取文档,而成本几乎总是在1到1.5 RU之间。

RUCost.png

1 个答案:

答案 0 :(得分:0)

在您理解为什么您的要求没有意义之前,我需要为您澄清一些事情。

使用自我/替代链接和分区键值的直接读取总是比具有自我/替代链接和分区键值的查询更有效。这就是Cosmos的工作方式。

首先根本无法实现您所要求的原因是因为id值在集合中不是唯一的。只要具有相同id的无限项目就可以,只要它们位于不同的逻辑分区中即可(这意味着您id的值仅在其自己的逻辑分区中是唯一的)。

这意味着在这种情况下,集合中每个文档的AltLink都将完全相同。服务器将如何知道您真正想要的文档?对于SelfLink来说也是如此,因为每个文档使用资源ID,因此每个文档都是唯一的。但是,除非您将其指向逻辑分区,否则服务器将无法知道此资源ID的位置。

您应该做的是使用SDK的Read方法或REST API的Read方法,以及要查找的分区键值