【问题标题】:MongoEngine Insert QueriesMongoEngine 插入查询
【发布时间】:2015-09-21 04:40:33
【问题描述】:

我有模特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"
    }
}

注意空的 phonegcm_details 字段,并添加了 push__phonepush__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)

这是怎么回事?我做错了什么?

【问题讨论】:

    标签: python mongodb flask mongodb-query mongoengine


    【解决方案1】:

    你的错误在这里:

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

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 1970-01-01
      • 2012-12-09
      • 2012-12-28
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多