Azure cosmosdb 正在处理需要索引的查询

Azure cosmosdb 正在处理需要索引的查询,azure-cosmosdb,Azure Cosmosdb,我正在使用本地模拟器尝试从地理空间查询返回结果。如果不是因为我剃光头,我会把头发扯下来。我已经描述了我正在尝试做什么以及我在这里尝试了什么: 看在上帝的份上,如果你有什么建议,请帮忙。我的生活在这里因为这个糟糕的问题而分崩离析 谢谢你们能提供的任何帮助 -r我相信您可以进行自连接以展平设备阵列并使用“ST_DISTANCE()”。它看起来像这样 SELECT d.name FROM users u JOIN d IN u.devices WHERE ST_DISTANCE(d.currentL

我正在使用本地模拟器尝试从地理空间查询返回结果。如果不是因为我剃光头,我会把头发扯下来。我已经描述了我正在尝试做什么以及我在这里尝试了什么:

看在上帝的份上,如果你有什么建议,请帮忙。我的生活在这里因为这个糟糕的问题而分崩离析

谢谢你们能提供的任何帮助


-r

我相信您可以进行自连接以展平设备阵列并使用“ST_DISTANCE()”。它看起来像这样

SELECT d.name
FROM users u
JOIN d IN u.devices
WHERE ST_DISTANCE(d.currentLocation, <user location>) < 500
选择d.name
来自用户u
加入美国设备协会
其中ST_距离(d.currentLocation,)<500
不是100%确定它会使用索引,但我认为它会

如果做不到这一点,可能会有另一种方法对您的模式进行调整。存储所有设备位置的非规范化多边形。然后,可以生成一个多边形,该多边形近似于以用户所在位置为中心的圆,并具有指定的半径。然后,您可以使用
ST_INTERSECTS()
与此模拟圆对所有设备的非规范化多边形组合查询


我还没有尝试过这个,所以我不确定它是否会使用索引,但我认为很有可能。此外,非规范化多边形的合成可能很棘手。我建议您找到设备的中心,使多边形成为一个星形,从每个设备返回到中心或靠近中心,然后返回到下一个设备,以此类推,如果用户位置在两台设备之间,但都不在用户的指定半径范围内,则返回结果的可能性要小得多。

我非常感谢拉里的建议。事实上,我可以用我的查询让它工作。结果我被Azure门户网站给宠坏了,它自动为我创建了一个策略,而本地DocumentDB模拟器没有。因此,我采用Azure创建的策略并将其粘贴到仿真器中,最后一次查询按预期工作。作为参考,以下是政策:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*",
  "indexes": [
    {
      "kind": "Range",
      "dataType": "Number",
      "precision": -1
    },
    {
      "kind": "Range",
      "dataType": "String",
      "precision": -1
    },
    {
      "kind": "Spatial",
      "dataType": "Point"
    }
  ]
}
 ],
 "excludedPaths": []
}

再次感谢!非常感谢

我没有因此否决你的问题,但其他人可能会这样做,因为最好不要让你的问题的核心在链接的另一端。我建议您编辑并将该内容引入问题。