如何使用Eve中的帖子批量查找mongo文档?

时间:2015-09-24 16:30:16

标签: post flask pymongo eve

我使用Eve(flask)作为mongodb的API接口。现在我正在尝试通过此界面设置批量查找项目。这意味着我想要批量查找文档。

通常你会为此使用get。因此,例如,如果您有一组具有字段名称和电话号码的人员,您可以获得更多端点/人员/更少姓名的请求,并返回相应的文档,包括电话号码。

如果你想一次查找几个文件,比如说,按照我们的例子,你需要几个人的电话号码,单独查找每个人的费用会很高,即获取电话号码需要很长时间。

您可以使用类似?where = {" name" $ in [" Pedro"," Juan"]}以获得一个获取请求的两个人的电话号码,这比两个获取请求更有效(=更快),一个为每个人。但是,此方法的适用性有限,因为get请求的最大长度约为64K(1),这意味着如果我们假设名称长度大约为10,那么只能以这种方式检索数千个文档。 -20个字符。

因此,较大查找的自然方法似乎使用了帖子请求。但是,就我所见,eve post接口用于插入,而不是用于查找(查找)。

我已经用烧瓶手动实现了一些端点的查找,但是有没有办法使用Eve来做这个?要点:有没有办法用邮件请求批量查找文档?

1 个答案:

答案 0 :(得分:1)

您可以使用动态查找过滤器。基本上你将回调函数挂钩到每个GET请求。在您的回调中,根据需要将lookup更新为(source):

def pre_GET(resource, request, lookup):
    lookup["name"] = {'$in': list_of_names}


 app = Eve()

 app.on_pre_GET += pre_GET
 app.run()

或者您甚至可以设置预定义的数据过滤器(来源):

people = {
    'datasource': {
        'filter': {'username': {'$exists': True}}
        }
}

第二个选项使过滤器保持静态,但您仍然可以将其与动态过滤器混合使用。

总的来说,整个事情闻起来很糟糕。我不知道你的用例,但考虑替代方案,例如,引入一个" customer_type"要查询的字段。这可能会使性能和代码维护变得更容易。

在任何情况下,如果您正在进行查询,POST不是寻找的地方。