Сохранить mongo_id в документе MongoAlchemy?

Можно ли хранить mongo_id как ObjectId объект в поле MongoAlchemy? Я был в состоянии хранить ObjectId внутри документа, который я определил вручную, но кажется, что я ограничен хранением строкового значения идентификатора в контексте MongoAlchemy ORM.

Вот часть моего кода:

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()

Вы увидите, что я могу хранить mongo_id как ObjectId объект в Group метод add_participant (поскольку он создает документ вручную, а не через ORM MongoAlchemy), но вынужден преобразовать mongo_id в строку, чтобы сохранить его в db.StringField,

Я пытался сохранить оригинал ObjectId в db.AnythingField, но не смог отфильтровать его.

Кто-нибудь знает, возможно ли сохранить ObjectId в поле MongoAlchemy, а затем фильтровать по нему в запросе к базе данных?

Спасибо!

1 ответ

Решение

Вы хотите ObjectIdField: http://www.mongoalchemy.org/api/schema/fields.html

Это тип поля, которое используется для mongo_id (хотя это поле имеет специальный регистр)

Пытаться

id = db.ObjectIdField().gen()

Это автоматически сгенерирует идентификатор объекта для каждого экземпляра объекта / документа mongo db - как и id в реляционных базах данных

Другие вопросы по тегам