cosmos SQL 是否支持使用 AltLink 进行查询的方式?
Does cosmos SQL support a way to query using the AltLink?
我想知道是否有任何方法可以使用 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
在您理解为什么您的要求没有意义之前,我需要为您说明一些事情。
使用 self/alt link 和分区键值的直接读取总是比使用 self/alt link 和分区键值的查询更有效。这就是 Cosmos 的工作方式。
您所要求的根本不可能的原因是因为 id
值在集合中不是唯一的。只要它们位于不同的逻辑分区中(这意味着您的 id
值仅在其自己的逻辑分区中唯一),您就可以拥有具有相同 id
的无限项。
这意味着在这种情况下,集合中每个文档的 AltLink
将完全相同。服务器如何知道您真正想要哪个文档?对于每个文档唯一的 SelfLink
也是如此,因为它使用资源 ID。但是,除非您将其指向逻辑分区,否则服务器无法知道此资源 ID 所在的位置。
您应该按照要求执行的方法是使用 SDK 的 Read
方法或 REST API 的 Read
方法,以及分区键值你要找的。
我想知道是否有任何方法可以使用 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
在您理解为什么您的要求没有意义之前,我需要为您说明一些事情。
使用 self/alt link 和分区键值的直接读取总是比使用 self/alt link 和分区键值的查询更有效。这就是 Cosmos 的工作方式。
您所要求的根本不可能的原因是因为 id
值在集合中不是唯一的。只要它们位于不同的逻辑分区中(这意味着您的 id
值仅在其自己的逻辑分区中唯一),您就可以拥有具有相同 id
的无限项。
这意味着在这种情况下,集合中每个文档的 AltLink
将完全相同。服务器如何知道您真正想要哪个文档?对于每个文档唯一的 SelfLink
也是如此,因为它使用资源 ID。但是,除非您将其指向逻辑分区,否则服务器无法知道此资源 ID 所在的位置。
您应该按照要求执行的方法是使用 SDK 的 Read
方法或 REST API 的 Read
方法,以及分区键值你要找的。