Cosmos DB按来自联接

问题描述

我创建了以下自定义查询,以按照在join子句中创建的kind临时表中定义的“ Priority”的顺序对“ posts”集合中的文档进行排序。现在,查询本身可以正常工作,但是只要我按优先级排序,它就会引发错误。因此,基本上,使用不属于文档的变量进行排序是行不通的。有没有解决的办法?我想按优先顺序排序的原因是,我可以按顺序获取文档,并可以使用延续令牌从宇宙中获取分页数据。

请注意,内部查询是由我在我的Web应用程序代码中动态生成的,因此我无法在“帖子”容器中的文档中预先分配优先级。

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',Density:'Medium',Priority:1},Thickness:'Medium',Priority:2},Texture:'Curly',Priority:3},Priority:4},Priority:5},Priority:6},Priority:7},{Porosity:'Low',Priority:8},Priority:9},Priority:10},Priority:11},Priority:12},Priority:13},Priority:14},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)的文档中找到了一条线索,说支持,但是由于没有相同的示例,因此我不确定这样做如何。

我得到的错误

无法查询容器帖子的项目:{“ code”:400,“ body”:{“ code”:“ BadRequest”,“ message”:“网关未能检索查询计划:消息:{” errors“: [{“ severity”:“错误”,“ message”:“不支持的ORDER BY子句。 ORDER BY项目表达式无法映射到文档路径。“}]}

解决方法

文档的remarks section似乎表明了该问题:

ORDER BY子句要求索引策略包括索引 对于要排序的字段。 Azure Cosmos DB查询运行时 支持根据属性名称排序,而不基于计算 属性

鉴于weights.Priority不是文档中的属性,因此无法编制索引。这表明必须将排序值以某种方式合并到持久数据模型中。