【问题标题】:Chaining queries in MongoEngineMongoEngine 中的链接查询
【发布时间】:2013-08-12 17:58:42
【问题描述】:

我正在为标准 CRUD 应用程序实现 REST API。在一个示例中,要获取用户列表,客户端可以调用:

GET api.site.com/users (以及可选) ?name=x phone=x email=x

传递上述可选参数过滤我搜索的用户。

我正在尝试在 Python 中实现这个逻辑。我正在考虑链接子查询,如下所示:

给定:

users = User.objects()

然后:

if 'name' in request.args:
    users = users.objects(name = request.args['name'])

还有:

# List of users is smaller after filtering by name
if 'phone' in request.args:
    users = users.objects(phone = request.args['phone'])

还有:

# List of users is smaller after filtering by phone
if 'email' in request.args:
    users = users.objects(email = request.args['email'])

但是该方法不可用,我无法通过查看 MongoEngine API 参考或用户指南或教程来了解如何执行此操作。

如何在 MongoEngine 中链接子查询?

【问题讨论】:

    标签: python mongodb rest flask mongoengine


    【解决方案1】:

    因为,mongoengine supports keyword arguments to the objects call,您可以创建一个字典,将 keys 作为 field_names,将 values 作为 field_values。然后在查询时使用这个字典。例如:

    query = {}
    
    if 'name' in request.args:
        query['name'] = request.args['name']
    
    if 'phone' in request.args:
        query['phone'] = request.args['phone']
    
    if 'email' in request.args:
        query['email'] = request.args['email']
    
    user = User.objects(**query)
    

    以上只是一个示例,您可能想要添加安全措施,并且可能有一个默认查询,具体取决于您的应用程序。

    【讨论】:

      【解决方案2】:

      http://docs.mongoengine.org/apireference.html#mongoengine.queryset.QuerySet.__call__ mongoengine.QuerySet 对象本身是可调用的。只需调用结果查询集即可完成链接查询。

      users = User.objects()
      
      if 'name' in request.args:
          users = users(name = request.args['name'])
      
      if 'phone' in request.args:
          users = users(phone = request.args['phone'])
      
      if 'email' in request.args:
          users = users(email = request.args['email'])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-11
        • 2019-04-22
        • 2012-12-09
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多