在MongoAlchemy文档上存储mongo_id?

时间:2014-08-15 20:23:26

标签: python mongodb flask mongoalchemy

是否可以将mongo_id存储为MongoAlchemy字段中的ObjectId对象?我已经能够在我手动定义的文档中存储ObjectId,但似乎我只能在MongoAlchemy ORM的上下文中存储id的字符串值。

以下是我的一些代码:

class Group(db.Document):  
    name = db.StringField()
    trial_id = db.StringField(required=False)
    participants = db.ListField(
        db.DictField(db.AnythingField()), default_empty=True, required=False)

    def add_participant(self, participant):
        self.participants.append({
            'participant_id': participant.mongo_id,
            'start': datetime.utcnow(),
            })

class Trial(db.Document):    
    name = db.StringField()
    groups = db.ListField(
        db.DocumentField(Group), default_empty=True, required=False)

    def add_group(self, group):
        group.trial_id = str(self.mongo_id)
        group.save()

    def get_group(self, group):
        return Group.query.filter(
            {'name': group, 'trial_id': str(self.mongo_id)}).first()

您会看到我能够在ObjectId方法Group中将mongo_id存储为add_participant对象(因为它是手动创建文档,而不是通过MongoAlchemy ORM创建) ,但我被迫将mongo_id转换为字符串,以便将其存储在db.StringField中。

我尝试将原始ObjectId存储在db.AnythingField中,但之后无法通过它进行过滤。

是否有人知道是否可以在MongoAlchemy字段中存储ObjectId,然后在数据库查询中对其进行过滤?

谢谢!

2 个答案:

答案 0 :(得分:1)

你想要一个ObjectIdField:http://www.mongoalchemy.org/api/schema/fields.html#mongoalchemy.fields.ObjectIdField

这是用于mongo_id的字段类型(虽然那个是特殊的)

答案 1 :(得分:0)

尝试

my_field

这将自动为mongo数据库对象/文档的每个实例生成对象ID-与关系数据库中的ID一样