python – mongokit索引不起作用

我正在使用Flask和MongoDB开发Web应用程序.我使用(Flask-)MongoKit来定义一个模式来验证我的数据.

在我的数据库中,有一个名为“users”的集合(见下文),其中包含一个字段“email”.我尝试在MongoKit文档(http://namlook.github.com/mongokit/indexes.html)中指定的该字段上创建唯一索引.但是,当我通过MongoDB客户端shell检查集合索引时,根本没有索引“email”.

我在网上发现了一个类似的问题:“唯一索引不起作用”(https://github.com/namlook/mongokit/issues/98)

有人知道它为什么不起作用吗?

用户收藏:

@db.register
class User(Model):

    __collection__ = 'users'

    structure = {
        'first_name': basestring,
        'last_name': basestring,
        'email': basestring,
        'password': unicode,
        'registration_date': datetime,
    }

    required_fields = ['first_name', 'last_name', 'email', 'password', 'registration_date']

    default_values = {
        'registration_date': datetime.utcnow,
    }

    # Create a unique index on the "email" field
    indexes = [
        {
            'fields': 'email',  # note: this may be an array
            'unique': True,     # only unique values are allowed 
            'ttl': 0,           # create index immediately
        },
    ]

db.users.getIndexes()输出:

[
{
    "v" : 1,
    "key" : {
        "_id" : 1
    },
    "ns" : "youthmind.users",
    "name" : "_id_"
},
]

请注意,我也尝试没有’ttl’:0,我能够使用以下代码创建索引:

db.users.create_index('email', unique=True)

我认为这直接使用了pymongo Connection对象.

在此先感谢您的帮助.

最佳答案 你正在这样做你应该怎么做.从版本0.7.1(可能是0.8版本)开始,MongoKit中的自动索引创建已被删除.
Here是一个问题.

它背后的原因是它必须在集合上调用ensureIndex.名称的“确保”部分使它看起来像检查然后创建索引(如果它不存在),但Mongo的开发人员说它可能仍然结束(重新)创建整个索引,这可能非常昂贵.开发人员还说它应该被视为一项管理任务,而不是开发任务.

解决方法是自己为您定义为升级/创建脚本一部分的列表中的每个索引调用create_index.

点赞