我的数据库中存储了一系列帖子,如下所示:
{
content: 'foo',
location: (37.423021, -122.083739)
},
{
content: 'bar',
location: (37.422473, -122.090386)
}
我还有一个函数between
,可以计算两点之间的距离(英里)。它的工作原理如下:
>>> between((37.423021, -122.083739), (37.422473, -122.090386))
0.36649505427211615
我使用它来构建一个谓词函数valid
,它将接收文档并返回一个表示它是否有效的布尔值。该功能可能类似于:
def valid(document):
return between(document.location, CONSTANT_LOCATION)
是否可以将此谓词用作查询的选择器?
答案 0 :(得分:1)
是的,你可以。您可以使用搜索中提供的自定义javascript函数执行此操作。请注意,您必须在javascript中编写。
检查mongo中的$where子句,但请记住它会对集合进行整个扫描。
db.myCollection.find({ $where: function() {
return (between((37.423021, -122.083739), (37.422473, -122.090386)) < 1);
}});
如果您使用半身计算2点之间的距离,请在此处查看我的optimized formula。
我无法理解的一件事是:你如何获得第一点和第二点。看起来他们在不同的文件中。
编辑比我提供的方法没有任何问题。你可以在return中编写你的函数,或者尝试保存你的函数(它已经在SO的某处解释了如何执行此操作)并以我展示的方式调用它。使用文档中的坐标 - 您必须执行this.location[0]
,this.location[1]