是否可以使用EXTO和MongoDB进行地理空间查询?

是否可以使用EXTO和MongoDB进行地理空间查询?,mongodb,phoenix-framework,ecto,Mongodb,Phoenix Framework,Ecto,我正在从事一个Phoenix项目,该项目在MongoDB中存储lat/lng值,需要使用MongoDB的内置查询,以便根据两点之间的距离查询记录 我整个上午都在四处寻找,发现了一个专门针对博士后的项目。除非别无选择,否则我不想转学博士后 有没有人有过使用Ecto/MongoDB和查询的经验,可以为我指出正确的方向,或者知道目前是否可以使用Ecto 一个可能的替代方案是使用mongoose设置一个简单的nodejs服务器来处理地理查询,然后在必要时让Phoenix切换到该服务?但我显然更喜欢基于外

我正在从事一个Phoenix项目,该项目在MongoDB中存储lat/lng值,需要使用MongoDB的内置查询,以便根据两点之间的距离查询记录

我整个上午都在四处寻找,发现了一个专门针对博士后的项目。除非别无选择,否则我不想转学博士后

有没有人有过使用Ecto/MongoDB和查询的经验,可以为我指出正确的方向,或者知道目前是否可以使用Ecto

一个可能的替代方案是使用mongoose设置一个简单的nodejs服务器来处理地理查询,然后在必要时让Phoenix切换到该服务?但我显然更喜欢基于外部技术的解决方案(如果有的话)

谢谢


Paul

它并没有直接在mongodb_-Exto中实现,但Michał说它应该可以使用片段

在IRC中,他写道:

类似于
where:fragment(foo:[“$geointen”:[…])的内容

$Geoin已明确排除在原始工作中。。。

…并且不显示在NormalizedQuery模块中


另外请注意,mongodb_-ecto仍然需要ecto 1.0,因此不能将其与ecto 2 beta一起使用。

是的,这是可能的。如前所述,您可以使用
片段
。完整的示例可能会有所帮助:

near_sphere = [
  "$nearSphere": [
    "$geometry": [
      "type": "Point",
      "coordinates": [10.0, 20.0]
    ],
    "$maxDistance": 1000
  ]
]

from(c in City, where: fragment(location: ^near_sphere)
为了实现这一点,还需要为location字段创建索引。根据文档,最好的方法是使用GeoJSON存储位置,但也可以使用array:

defmodule MyApp.City do
  # ...
  schema "cities" do
    field :location, {:array, :float}
  end
end
然后您可以使用
execute/1
()

def up do
  execute [
    createIndexes: "cities",
    indexes: [
      [
        key: [location: "2dsphere"],
        name: "location_2dsphere",
        "2dsphereIndexVersion": 3
      ]
    ]
  ]
end

def down do
  execute [
    dropIndexes: "cities",
    index: "location_2dsphere"
  ]
end