4

標準の CRUD アプリ用の REST API を実装しています。1 つの例では、ユーザーのリストを取得するために、クライアントは以下を呼び出すことができます。

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 でサブクエリをチェーンするにはどうすればよいですか?

4

2 に答える 2

7

mongoengine はcallのキーワード引数をサポートしているobjectsため、キーを field_names として、を 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)

上記は単なるサンプルです。アプリによっては、セキュリティ対策を追加したり、デフォルトのクエリを使用したりすることが必要になる場合があります。

于 2013-08-11T08:31:05.537 に答える