2014-03-29 130 views
0

PyMongo查询我有一系列存储在我的数据库这样的帖子:与谓词函数

{ 
    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

是的,你可以。您可以使用搜索中提供的自定义JavaScript功能执行此操作。请注意,你必须在JavaScript之间编写你的。

在mongo中检入$where子句,但请记住它会对集合进行全面扫描。

db.myCollection.find({ $where: function() { 
    return (between((37.423021, -122.083739), (37.422473, -122.090386)) < 1); 
}}); 

如果计算使用半正矢看看我的optimized formula这里2点之间的距离。

我不明白的一件事是:你如何得到第一点和第二点。看起来他们在不同的文件中。

编辑比你将没有问题的方法,我提供。你可以在你的函数中写回你的函数,或者尝试保存你的函数(它已经在某处解释了如何实现),并以我展示的方式调用它。使用文档中的坐标 - 您必须执行以下操作:this.location[0],this.location[1]

+0

为了说明起见,第一点是硬编码到函数中。第二个应该是查询文档的一个属性。 –

+0

@AnkitRanjan酷。我编辑了答案。 –

+0

是否可以使用Python函数作为'$ where'子句? –