繁体   English   中英

具有谓词功能的PyMongo查询

[英]PyMongo Queries with a Predicate Function

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

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

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

是的你可以。 您可以使用搜索中提供的自定义javascript函数来执行此操作。 请注意,您必须使用javascript编写两者之间的内容。

在mongo中检查$ where子句,但请记住它将对集合进行完整扫描。

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

如果您使用Haversine计算2个点之间的距离,请在此处查看我的优化公式

我无法理解的一件事是:如何获得第一点和第二点。 看起来它们在不同的文档中。

编辑比你将与方法没有问题,我公司提供。 您可以在return内部编写函数,也可以尝试保存函数(在SO的某处已对此进行了说明)如何按照我演示的方式调用它。 使用文档中的坐标-您必须执行以下操作: this.location[0]this.location[1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM