Запрос mongoDB через графен с аргументами - PullRequest
1 голос
/ 16 июня 2020

Доброе утро,

Я хотел бы иметь возможность сделать запрос GraphQL, который «задает» MongoDB следующий вопрос:

query 
{ user(firstname:"Pierre}
    { lastname}
}
  • Для этого я определил a model.py:
from mongoengine import Document
from mongoengine.fields import StringField
class User(Document):
    meta = {'collection': 'user'}
    firstname = StringField(required=True)
    lastname = StringField(required=True)
  • Затем я определил в Schema.py:
from graphene_mongo import MongoengineObjectType
from graphene import connect
from models import User as UserModel

connect(db="graphene-mongo-example",host="127.0.0.1:27017",alias="default")

class User(MongoengineObjectType):
    class Meta:
        model = UserModel

class Query(graphene.ObjectType):

    users = graphene.List(User)

    def resolve_users(self, info,firstname):
        return list(UserModel.objects.all(firstname))

schema = graphene.Schema(query=Query)

Мне не удается иметь только пользователя с данным именем .. Не могли бы вы мне помочь?

Большое спасибо

B.

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Файл models.py не изменился. Вот код, который я написал для ответа на возникшую у меня проблему:

import graphene
from graphene.relay import Node
from flask import Flask
from flask_graphql import GraphQLView
from graphene_mongo import MongoengineObjectType
from models import User as UserModel
from mongoengine import connect


connect(db="graphene-mongo-example",host="127.0.0.1:27017",alias="default")


class User(MongoengineObjectType):
    class Meta:
        model = UserModel
        filter_fields = ['fisrt_name']
        interfaces = (Node,)

class Query(graphene.ObjectType):
    user_by_name = graphene.Field(User,gName=graphene.String())

    def resolve_user_by_name(parent,info,gName):
       return UserModel.objects.get(first_name=gName)

schema = graphene.Schema(query=Query)

#==================================================================

app = Flask(__name__)
app.debug = True
app.add_url_rule(
    "/graphql", view_func=GraphQLView.as_view("graphql", schema=schema, graphiql=True)
  )

if __name__ == "__main__":
    app.run()

Затем я могу запросить с помощью GraphQL такой запрос:

query { 
userByName(gName:"Pierre")
  {lastName 
   firstName
  }
}
0 голосов
/ 16 июня 2020

query {user (firstname: "Pierre} {lastname}}

если выше ваш запрос graphql, тогда он должен быть

query

{user (firstname: "Pierre") {lastname}}

Затем прочтите этот параметр firstname в своем коде и получите документ соответственно

...