我想知道是否可以使用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之间。
答案 0 :(得分:0)
在您理解为什么您的要求没有意义之前,我需要为您澄清一些事情。
使用自我/替代链接和分区键值的直接读取总是比具有自我/替代链接和分区键值的查询更有效。这就是Cosmos的工作方式。
首先根本无法实现您所要求的原因是因为id
值在集合中不是唯一的。只要具有相同id
的无限项目就可以,只要它们位于不同的逻辑分区中即可(这意味着您id
的值仅在其自己的逻辑分区中是唯一的)。
这意味着在这种情况下,集合中每个文档的AltLink
都将完全相同。服务器将如何知道您真正想要的文档?对于SelfLink
来说也是如此,因为每个文档使用资源ID,因此每个文档都是唯一的。但是,除非您将其指向逻辑分区,否则服务器将无法知道此资源ID的位置。
您应该做的是使用SDK的Read
方法或REST API的Read
方法,以及要查找的分区键值