mongoengine的DictField()

py2.7
mongoengine 0.10.5

pop() 某些key时出现异常(同时更新3个key或以上)。不知原因。

    from mongoengine import connect, Document
    from mongoengine import StringField, DictField

    connect('default-db')


    class User(Document):
        # name = StringField(max_length=50, default='')  # 用户名
        properties = DictField()

    # User(properties={'show_1': True, 'show_2': True, 'show_3': True, 'show_4': True}).save()
    u = User.objects.all().first()
    if not u.properties:
        u.properties = {}
    print(u.properties)

    show_1 = 1
    show_2 = 1
    show_3 = 0
    show_4 = 1


    def __fun(attr, name, d):
        if attr:
            d[name] = True
        elif not attr and name in d:
            d.pop(name)  # error
            # d[name] = False  # ok


    __fun(show_1, 'show_1', u.properties)
    __fun(show_2, 'show_2', u.properties)
    __fun(show_3, 'show_3', u.properties)
    __fun(show_4, 'show_4', u.properties)
   
    # u.properties['show_1'] = True
    # u.properties['show_2'] = True
    # u.properties['show_4'] = True
    # u.properties.pop('show_3')  # error

    print(u.properties)
    
    # mongoengine.errors.OperationError: Could not save document (Cannot update 'properties' and 'properties.show_2' at the same time)
    u.save()

py3.5
mongoengine 0.11.0 正常

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 4,537评论 0 12
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • 1 Redis介绍1.1 什么是NoSql为了解决高并发、高可扩展、高可用、大数据存储问题而产生的数据库解决方...
    克鲁德李阅读 5,371评论 0 36
  • 大年初三,又是无聊的一天,为了不虚度光阴,选择了用微信读书来充实生活(就是找点写的素材),我决定(又做决定),今年...
    YANGZI加油阅读 177评论 0 1