mongodb - mongoengine 连接和多个数据库

标签 mongodb mongoengine graphene-python

我有 2 个数据库想要查询,但我只从其中一个获得结果。我将 mongoengine 与 python 和 graphene 一起使用(这是我第一次)。我已经用尽了我的搜索,但我不明白如何解决这个问题。这是我的代码:

import graphene
from mongoengine import Document, connect
from mongoengine.context_managers import switch_collection
from mongoengine.fields import (
    StringField,
    UUIDField,
    IntField,
    FloatField,
    BooleanField,
)
from graphene_mongo import MongoengineObjectType
from mongoengine.connection import disconnect


class UserModel(Document):
    meta = {"collection": "users"}

    userID = UUIDField()
    first_name = StringField()
    last_name = StringField()


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


class UsersQuery(graphene.ObjectType):
    users = graphene.List(Users)
    user = graphene.Field(Users, userID=graphene.UUID())

    def resolve_users(self, info):
        db = connect("users")
        users = list(UserModel.objects.all())
        db.close()
        return users

    def resolve_user(self, info, userID):
        return UserModel.objects(userID=userID).first()


users_schema = graphene.Schema(query=UsersQuery)
import graphene
from mongoengine import Document, connect
from mongoengine.fields import StringField, UUIDField
from graphene_mongo import MongoengineObjectType
from mongoengine.connection import disconnect


class Workout(Document):
    meta = {"collection": "workouts"}

    workoutID = UUIDField()
    workout_label = StringField()


class Workouts(MongoengineObjectType):
    class Meta:
        model = Workout


class Query(graphene.ObjectType):
    workouts = graphene.List(Workouts)
    workout = graphene.Field(Workouts, workoutID=graphene.UUID())

    def resolve_workouts(self, info):
        db = connect("workouts")
        wks = list(Workout.objects.all())
        db.close()
        return wks

    def resolve_workout(self, info, workoutID):
        return Workout.objects(workoutID=workoutID).first()


workouts_schema = graphene.Schema(query=Query)

现在,当我启动 python 服务器并运行 mongod 时,我可以点击/workouts,它将返回我需要的数组。但/users 不会返回结果。

我没有收到任何错误,我的 Graphite 烯查询没有任何问题。

我只能同时运行其中一个查询。

我尝试过使用别名,不关闭连接,甚至在类 UserModel 或 Workout 之前在顶层声明连接。

最佳答案

如果您的每个模型都绑定(bind)到不同的数据库。你应该使用这样的东西(cfr docs):

connect('workouts', alias='dbworkouts')  # init a connection to database named "workouts" and register it under alias "dbworkouts"
connect('users', alias='dbusers')    

class Workout(Document):
    meta = {"db_alias": "dbworkouts"}
    workoutID = UUIDField()
    ...

class UserModel(Document):
    meta = {"db_alias": "dbusers"}
    userID = UUIDField()
    ...

关于mongodb - mongoengine 连接和多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55584024/

相关文章:

javascript - $in 用于多个值

mongodb - 在 MongoDB 中创建数据库并从文件中插入数据

python - Python mongoengine 模型中仅保存一个字段

python - 带有 Django 和 MongoEngine 的 Python 中的 Unicode

python - 'input' 是 print() 的无效关键字参数

python - 如何覆盖 Graphite 烯中的 DjangoModelFormMutation 字段类型?

MongoDB在文档和子文档上匹配,使用什么作为索引?

javascript - Node Js : Exporting available Mongo database names doesn't work

python - 如何从发布的 base64 编码图像创建 MongoDB/mongoengine ImageField?

django - Graphite 烯 Django "Must provide query string"