具有谓词函数的PyMongo查询

时间:2014-03-29 20:59:48

标签: python mongodb pymongo mongodb-query

我的数据库中存储了一系列帖子,如下所示:

{
    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)

是否可以将此谓词用作查询的选择器?

1 个答案:

答案 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]

之类的操作