在MongoAlchemy文档中存储mongo_id?
我想知道在MongoAlchemy的字段中,是否可以把mongo_id存储为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()
你会看到,在Group
类的add_participant
方法中,我能够把mongo_id存储为ObjectId
对象(因为这是手动创建文档,而不是通过MongoAlchemy的ORM),但在存储到db.StringField
时,我却必须把mongo_id转换成字符串。
我尝试把原始的ObjectId
存储在db.AnythingField
中,但这样就无法通过它进行过滤了。
有没有人知道在MongoAlchemy的字段中存储ObjectId
,然后在数据库查询中按它进行过滤是否可行?
谢谢!
2 个回答
0
尝试一下
id = db.ObjectIdField().gen()
这段代码会自动为每个MongoDB对象或文档生成一个唯一的ID,就像关系型数据库中的ID一样。
1
你需要一个 ObjectIdField: http://www.mongoalchemy.org/api/schema/fields.html#mongoalchemy.fields.ObjectIdField
这个字段类型是用来存储 mongo_id 的(虽然这个是特殊处理的)。