我正在尝试编写一个查询,该查询使用JOIN
对数组中的位置执行地理空间匹配。我可以使用它,但是添加了DISTINCT
以删除重复项(查询A ):
SELECT DISTINCT VALUE
u
FROM
u
JOIN loc IN u.locations
WHERE
ST_WITHIN(
{'type':'Point','coordinates':[loc.longitude,loc.latitude]},
{'type':'Polygon','coordinates':[[[-108,-43],[-108,-40],[-110,-40],[-110,-43],[-108,-43]]]})
但是,我然后发现不支持将DISTINCT
与延续标记结合使用,除非您还添加ORDER BY
:
System.ArgumentException: Distict query requires a matching order by in order to return a continuation token. If you would like to serve this query through continuation tokens, then please rewrite the query in the form 'SELECT DISTINCT VALUE c.blah FROM c ORDER BY c.blah' and please make sure that there is a range index on 'c.blah'.
因此,我尝试像这样添加ORDER BY
(查询B ):
SELECT DISTINCT VALUE
u
FROM
u
JOIN loc IN u.locations
WHERE
ST_WITHIN(
{'type':'Point','coordinates':[loc.longitude,loc.latitude]},
{'type':'Polygon','coordinates':[[[-108,-43],[-108,-40],[-110,-40],[-110,-43],[-108,-43]]]})
ORDER BY
u.created
问题是DISTINCT
似乎不再生效,因为它例如两次返回同一记录。
要重现此内容,请使用以下数据创建一个文档:
{
"id": "b6dd3e9b-e6c5-4e5a-a257-371e386f1c2e",
"locations": [
{
"latitude": -42,
"longitude": -109
},
{
"latitude": -42,
"longitude": -109
}
],
"created": "2019-03-06T03:43:52.328Z"
}
然后运行上面的查询A 。尽管两个位置都与谓词匹配,但您将获得一个结果。如果删除DISTINCT
,将获得两次相同的文档。
现在运行查询B ,尽管有DISTINCT
子句,它也会返回两次相同的文档。
我在这里做什么错了?
答案 0 :(得分:0)
根据我的研究,确实复制了您的问题,这似乎是对cosmos db distinct
查询的缺陷。请参考以下链接:Provide support for DISTINCT。
此功能在数据浏览器中已损坏。因为宇宙只能 一次每页返回100个结果,distinge关键字只会 应用于单个页面。因此,如果您的结果集包含超过100个 结果,您仍可能会得到重复-它们只会在 单独分页的结果集。
您可以描述自己的情况,并对此反馈案进行投票。