Cosmos DB 按来自连接中使用的标量子查询的列排序
Cosmos DB sort by a column coming from a scalar subquery used in join
我创建了以下自定义查询,以按照我在我创建的有点临时 table 中定义的 'Priority' 的顺序对 'posts' 集合中的文档进行排序在连接子句中。现在,查询本身工作正常,但只要我按优先级排序,它就会抛出错误。所以基本上,使用不属于文档的变量进行排序是行不通的。有解决办法吗?我想按优先级排序的原因是这样我可以按顺序获取文档并可以使用延续令牌从 cosmos 中获取分页数据。
请注意,内部查询是我在我的 Web 应用程序代码中动态生成的,因此我无法在 'posts' 容器中的文档中预先分配优先级。
SELECT posts.id, posts.HairState, weights.Priority FROM posts
JOIN weights IN (
SELECT VALUE [{Porosity:'Medium',Texture:'Wavy',Thickness:'Fine',Density:'High',Priority:0},{Porosity:'Medium',Texture:'Wavy',Thickness:'Fine',Density:'Medium',Priority:1},{Porosity:'Medium',Texture:'Wavy',Thickness:'Medium',Density:'High',Priority:2},{Porosity:'Medium',Texture:'Curly',Thickness:'Fine',Density:'High',Priority:3},{Porosity:'Medium',Texture:'Wavy',Thickness:'Medium',Density:'Medium',Priority:4},{Porosity:'Medium',Texture:'Curly',Thickness:'Fine',Density:'Medium',Priority:5},{Porosity:'Medium',Texture:'Curly',Thickness:'Medium',Density:'High',Priority:6},{Porosity:'Medium',Texture:'Curly',Thickness:'Medium',Density:'Medium',Priority:7},{Porosity:'Low',Texture:'Wavy',Thickness:'Fine',Density:'High',Priority:8},{Porosity:'Low',Texture:'Wavy',Thickness:'Fine',Density:'Medium',Priority:9},{Porosity:'Low',Texture:'Wavy',Thickness:'Medium',Density:'High',Priority:10},{Porosity:'Low',Texture:'Curly',Thickness:'Fine',Density:'High',Priority:11},{Porosity:'Low',Texture:'Wavy',Thickness:'Medium',Density:'Medium',Priority:12},{Porosity:'Low',Texture:'Curly',Thickness:'Fine',Density:'Medium',Priority:13},{Porosity:'Low',Texture:'Curly',Thickness:'Medium',Density:'High',Priority:14},{Porosity:'Low',Texture:'Curly',Thickness:'Medium',Density:'Medium',Priority:15}]
)
WHERE posts.HairState.Porosity = weights.Porosity
AND posts.HairState.Texture = weights.Texture
AND posts.HairState.Thickness = weights.Thickness
AND posts.HairState.Density = weights.Density
ORDER BY weights.Priority
任何关于如何实现这一点的想法将不胜感激!我在此处的文档 (https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-order-by) 中找到的一条线索表明 受支持,但我不确定它是如何工作的,因为没有给出相同的示例。
我遇到的错误:
无法查询容器帖子的项目:{“代码”:400,“正文”:{“代码”:“BadRequest”,“消息”:“网关无法检索查询计划:消息:{“错误":[{"severity":"Error","message":"不支持的 ORDER BY 子句。 ORDER BY 项目表达式无法映射到文档路径。"}]}
文档的 remarks section 似乎指出了问题:
The ORDER BY clause requires that the indexing policy include an index
for the fields being sorted. The Azure Cosmos DB query runtime
supports sorting against a property name and not against computed
properties.
鉴于 weights.Priority
不是文档中的 属性,因此无法对其编制索引。这表明排序值必须以某种方式合并到持久数据模型中。
我创建了以下自定义查询,以按照我在我创建的有点临时 table 中定义的 'Priority' 的顺序对 'posts' 集合中的文档进行排序在连接子句中。现在,查询本身工作正常,但只要我按优先级排序,它就会抛出错误。所以基本上,使用不属于文档的变量进行排序是行不通的。有解决办法吗?我想按优先级排序的原因是这样我可以按顺序获取文档并可以使用延续令牌从 cosmos 中获取分页数据。
请注意,内部查询是我在我的 Web 应用程序代码中动态生成的,因此我无法在 'posts' 容器中的文档中预先分配优先级。
SELECT posts.id, posts.HairState, weights.Priority FROM posts
JOIN weights IN (
SELECT VALUE [{Porosity:'Medium',Texture:'Wavy',Thickness:'Fine',Density:'High',Priority:0},{Porosity:'Medium',Texture:'Wavy',Thickness:'Fine',Density:'Medium',Priority:1},{Porosity:'Medium',Texture:'Wavy',Thickness:'Medium',Density:'High',Priority:2},{Porosity:'Medium',Texture:'Curly',Thickness:'Fine',Density:'High',Priority:3},{Porosity:'Medium',Texture:'Wavy',Thickness:'Medium',Density:'Medium',Priority:4},{Porosity:'Medium',Texture:'Curly',Thickness:'Fine',Density:'Medium',Priority:5},{Porosity:'Medium',Texture:'Curly',Thickness:'Medium',Density:'High',Priority:6},{Porosity:'Medium',Texture:'Curly',Thickness:'Medium',Density:'Medium',Priority:7},{Porosity:'Low',Texture:'Wavy',Thickness:'Fine',Density:'High',Priority:8},{Porosity:'Low',Texture:'Wavy',Thickness:'Fine',Density:'Medium',Priority:9},{Porosity:'Low',Texture:'Wavy',Thickness:'Medium',Density:'High',Priority:10},{Porosity:'Low',Texture:'Curly',Thickness:'Fine',Density:'High',Priority:11},{Porosity:'Low',Texture:'Wavy',Thickness:'Medium',Density:'Medium',Priority:12},{Porosity:'Low',Texture:'Curly',Thickness:'Fine',Density:'Medium',Priority:13},{Porosity:'Low',Texture:'Curly',Thickness:'Medium',Density:'High',Priority:14},{Porosity:'Low',Texture:'Curly',Thickness:'Medium',Density:'Medium',Priority:15}]
)
WHERE posts.HairState.Porosity = weights.Porosity
AND posts.HairState.Texture = weights.Texture
AND posts.HairState.Thickness = weights.Thickness
AND posts.HairState.Density = weights.Density
ORDER BY weights.Priority
任何关于如何实现这一点的想法将不胜感激!我在此处的文档 (https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-order-by) 中找到的一条线索表明
我遇到的错误:
无法查询容器帖子的项目:{“代码”:400,“正文”:{“代码”:“BadRequest”,“消息”:“网关无法检索查询计划:消息:{“错误":[{"severity":"Error","message":"不支持的 ORDER BY 子句。 ORDER BY 项目表达式无法映射到文档路径。"}]}
文档的 remarks section 似乎指出了问题:
The ORDER BY clause requires that the indexing policy include an index for the fields being sorted. The Azure Cosmos DB query runtime supports sorting against a property name and not against computed properties.
鉴于 weights.Priority
不是文档中的 属性,因此无法对其编制索引。这表明排序值必须以某种方式合并到持久数据模型中。