我正在尝试根据状态(字符串)选择数据。我想要的是状态“草稿”首先出现,因此我尝试了以下方法:
import json
with open("test.json") as json_file:
json_data = json.load(json_file)
for g in json_data["features"]:
poly = g["geometry"]
cntr_code = g["properties"]["CNTR_CODE"]
nuts_id = g["properties"]["NUTS_ID"]
name = g["properties"]["NUTS_NAME"]
if cntr_code == "AT":
print(nuts_id)
# do plotting etc
else: # delete it if it is not part a specific country
json_data["features"].remove(g) # line in question
# do something else with the json_data
我得到一个错误:
不受支持的ORDER BY子句。 ORDER BY项目表达式无法映射到文档路径
我检查了Microsoft网站,并看到了以下内容:
ORDER BY子句要求索引策略包括要排序的字段的索引。 Azure Cosmos DB查询运行时支持对属性名称而不是计算属性进行排序。
我想这使我想做的查询变得不可能...我怎么能做到这一点?使用存储过程?
修改:
关于存储过程:实际上,我只是在考虑这一点,这意味着我需要在订购前检索所有数据,这很糟糕,因为我从数据库中获取了最大100的值...可以做到,所以我不必先检索所有数据吗?谢谢
谢谢!
答案 0 :(得分:1)
ORDER BY项目表达式无法映射到文档路径。
基本上,we are told我们只能使用文档的属性进行排序,而不能使用派生值进行排序。 c.status = "draft" ? 0:1
是派生值。
我的想法:
查询sql的两个部分:第一个select c.* from c where c.status ='draft'
,第二个select c.* from c where c.status <> 'draft' order by c.status
。最后,将它们结合起来。
或者您可以尝试使用问题中提到的存储过程来处理select * from c order by c.status
结果中的数据。通过if-else条件将草稿数据置于其他数据之前。