如何从父类mongoengine获取子集合

时间:2012-09-18 17:31:25

标签: mongodb mongoengine

我有以下模型:

class User(Document):
    first_name = StringField(required=True)
    last_name = StringField(required=True)
    username = StringField(required=True)

class TwitterUser(User):
    meta = {"collection":"TwitterUsers"}
    access_token = StringField(required=True)
    twitter_id = StringField(required=True)

class FacebookUser(User):
    meta = {"collection":"FacebookUsers"}
    fb_id = StringField(required=True)
    access_token = StringField(required=True)

在我的应用程序中的某个时刻,我需要根据access_token检索用户。但是,如果我有一个Twitter用户,我做User.objects(access_token = at).get()我没有得到结果。如果我做TwitterUser.objects(access_token = cookie).get()就行了。

有没有办法通过查询父集合来获取子类?

1 个答案:

答案 0 :(得分:1)

目前这是不可能的 - 因为User不知道它的孩子已搬回家并住在另一个收藏中。你确定孩子们需要不同的收藏品吗?如果是这样,您必须执行多个查询,并在找到User后停止。

或者,您可能希望更改架构并抽象出用于查询的公共部分,然后将社交平台特定部分放在不同的集合中,但通过GenericReferenceField链接 - 这意味着您始终拥有2个查询。