MongoEngine 插入查询
MongoEngine Insert Queries
我有模特User
class User(db.DynamicDocument):
user_id = db.UUIDField(primary_key=True,required=True,default=uuid.uuid4)
name = db.StringField(default='')
phone = db.ListField(db.StringField,default=list)
gcm_details = db.ListField(db.EmbeddedDocumentField('UserGCM'),default=list)
其中gcm_details是一个EmbeddedDocumentField
,其详细信息如下:-
class UserGCM(db.EmbeddedDocument):
gcm_key = db.StringField(default='')
device_id = db.StringField(default='')
我执行插入查询如下:-
name = 'something'
phone = ['12345678','456789']
gcm_obj = UserGCM(gcm_key=gcm_key,device_id=device_id)
user = User(name=name,push__phone=phone,push__gcm_details=gcm_obj).save()
这已保存。但是,当我在 mongo shell 中看到详细信息时,我得到以下文档。
{
"_id": BinData(3,
"MjpPJaNTQ823WuA8BP47jQ=="),
"parent_id": BinData(3,
"Ig7LNNAVQzCbjYG2KXvQjw=="),
"name": "something",
"phone": [
],
"gcm_details": [
],
"push__phone": [
"9999999999"
],
"push__gcm_details": {
"gcm_key": "string",
"device_id": "string",
"_cls": "UserGCM"
}
}
注意空的 phone
和 gcm_details
字段,并添加了 push__phone
和 push__gcm_details
字段。这是怎么回事?
如果我这样做
user = User(name=name,phone=phone,gcm_details=gcm_obj).save()
不使用 push__
,它会抛出一条错误消息:-
TypeError: unbound method _validate() must be called with StringField instance as first argument (got unicode instance instead)
这是怎么回事?我做错了什么?
你的错误在这里:
phone = db.ListField(db.StringField, default=list)
您应该像这样使用 StringField
的实例:
phone = db.ListField(db.StringField(), default=list)
那么你就可以为所欲为了:
name = 'something'
phone = ['12345678', '456789']
gcm = UserGCM(gcm_key=gcm_key, device_id=device_id)
user = User(
name=name,
phone=phone,
gcm_details=[gcm],
).save()
我有模特User
class User(db.DynamicDocument):
user_id = db.UUIDField(primary_key=True,required=True,default=uuid.uuid4)
name = db.StringField(default='')
phone = db.ListField(db.StringField,default=list)
gcm_details = db.ListField(db.EmbeddedDocumentField('UserGCM'),default=list)
其中gcm_details是一个EmbeddedDocumentField
,其详细信息如下:-
class UserGCM(db.EmbeddedDocument):
gcm_key = db.StringField(default='')
device_id = db.StringField(default='')
我执行插入查询如下:-
name = 'something'
phone = ['12345678','456789']
gcm_obj = UserGCM(gcm_key=gcm_key,device_id=device_id)
user = User(name=name,push__phone=phone,push__gcm_details=gcm_obj).save()
这已保存。但是,当我在 mongo shell 中看到详细信息时,我得到以下文档。
{
"_id": BinData(3,
"MjpPJaNTQ823WuA8BP47jQ=="),
"parent_id": BinData(3,
"Ig7LNNAVQzCbjYG2KXvQjw=="),
"name": "something",
"phone": [
],
"gcm_details": [
],
"push__phone": [
"9999999999"
],
"push__gcm_details": {
"gcm_key": "string",
"device_id": "string",
"_cls": "UserGCM"
}
}
注意空的 phone
和 gcm_details
字段,并添加了 push__phone
和 push__gcm_details
字段。这是怎么回事?
如果我这样做
user = User(name=name,phone=phone,gcm_details=gcm_obj).save()
不使用 push__
,它会抛出一条错误消息:-
TypeError: unbound method _validate() must be called with StringField instance as first argument (got unicode instance instead)
这是怎么回事?我做错了什么?
你的错误在这里:
phone = db.ListField(db.StringField, default=list)
您应该像这样使用 StringField
的实例:
phone = db.ListField(db.StringField(), default=list)
那么你就可以为所欲为了:
name = 'something'
phone = ['12345678', '456789']
gcm = UserGCM(gcm_key=gcm_key, device_id=device_id)
user = User(
name=name,
phone=phone,
gcm_details=[gcm],
).save()