Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Mongoengine整数id和用户创建_Python_Django_Mongodb_Mongoengine_Nosql - Fatal编程技术网

Python Mongoengine整数id和用户创建

Python Mongoengine整数id和用户创建,python,django,mongodb,mongoengine,nosql,Python,Django,Mongodb,Mongoengine,Nosql,MongoDB使用字符串(散列)\ id字段而不是整数;那么,如何获取经典id主键呢?每次创建类实例时都要增加一些变量 class Post(Document): authors_id = ListField(IntField(required=True), required=True) content = StringField(max_length=100000, required=True) id = IntField(required=True, primary_

MongoDB使用字符串(散列)\ id字段而不是整数;那么,如何获取经典id主键呢?每次创建类实例时都要增加一些变量

class Post(Document):
    authors_id = ListField(IntField(required=True), required=True)
    content = StringField(max_length=100000, required=True)
    id = IntField(required=True, primary_key=True)

    def __init__(self):
        //what next?
  • 尝试创建新用户引发异常:

    mongoengine.queryset.OperationError: Tried to save duplicate unique keys 
    (E11000 duplicate key error index: test.user.$_types_1_username_1
     dup key: { : "User", : "admin" })
    
  • 代码:

    为什么?

    1)如果您真的想这样做,您必须重写保存文档的mongoengine方法,使其查找一个id值最高的文档,并使用该id+1保存文档。这将产生开销(以及每写一次额外的读取),因此我不鼓励您遵循此路径。您还可能存在重复id的问题(如果您同时保存两条记录,您将读取最后一个id的两倍,比如1,并保存两倍的id 1+1=2=>这非常糟糕-为了避免此问题,您需要在每次插入时锁定整个集合,因为会丢失性能)

    2) 简单地说,您不能用同一用户名保存多个用户(错误消息告诉您),而且您已经有了一个名为“admin”的用户。

    1)如果您真的想这样做,您必须覆盖保存文档的mongoengine方法,使其查找一个id值最高的文档,并使用该id+1保存该文档。这将产生开销(以及每写一次额外的读取),因此我不鼓励您遵循此路径。您还可能存在重复id的问题(如果您同时保存两条记录,您将读取最后一个id的两倍,比如1,并保存两倍的id 1+1=2=>这非常糟糕-为了避免此问题,您需要在每次插入时锁定整个集合,因为会丢失性能)


    2) 简单地说,您不能用同一用户名保存多个用户(错误消息告诉您),并且您已经有一个名为“admin”的用户。

    如果您想使用递增整数ID,请在此处介绍执行此操作的方法:


    这对于大型数据库/应用程序来说无法扩展,但对于小型或中型应用程序来说效果很好。

    如果您想使用递增整数ID,下面介绍了执行此操作的方法:


    这对于不同的大型数据库/应用程序来说无法扩展,但对于小型或中型应用程序来说效果很好。

    您可以使用
    序列字段来提供此功能。但是如上所述,递增的id不能很好地扩展,它们真的需要吗?您不能使用
    ObjectId
    或slug吗?

    您可以使用
    SequenceField
    来提供此功能。但是如上所述,递增的id不能很好地扩展,它们真的需要吗?您不能使用
    ObjectId
    或slug吗?

    1)您还有其他方法吗?我只是不想像site/post/50那样使用它是的,solvedgo用于内部生成的mogoid!如果您真的想使用增量ID,也可以切换到mysql;)您不需要锁定插入的整个集合,只需将递增键保留在其自己的集合中。请参阅我的链接答案。1)您还有其他方法吗?我只是不想像site/post/50那样使用它是的,solvedgo用于内部生成的mogoid!如果您真的想使用增量ID,也可以切换到mysql;)您不需要锁定插入的整个集合,只需将递增键保留在其自己的集合中。请参阅我的链接答案。将问题拆分为两篇帖子,因为它们不相关。将问题拆分为两篇帖子,因为它们不相关。谢谢!这将是我的小博客:)谢谢!这将是我的小博客:)哈哈,我不知道我怎么会错过它。非常感谢,这正是我真正需要的。好东西,别忘了把问题标记为已回答,以便将来帮助他人:)哈哈,我不知道我怎么会错过它。非常感谢,这正是我真正需要的。好东西,别忘了把问题标记为已回答,以便将来帮助他人:)
    user = User.create_user(username='admin', email='example@mail.com',
                            password='pass')
    user.is_superuser = True
    user.save()