2016-12-12 127 views
7

我使用的Django nonrel用MongoDB的引擎,当我运行python manage.py执行syncdb我收到以下错误:Django的nonrel执行syncdb和MongoDB:pymongo.errors.OperationFailure

Traceback (most recent call last): 
File "manage.py", line 22, in <module> execute_from_command_line(sys.argv) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line 
utility.execute() 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv 
self.execute(*args, **options.__dict__) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute 
output = self.handle(*args, **options) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django/core/management/base.py", line 415, in handle 
return self.handle_noargs(**options) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django/core/management/commands/syncdb.py", line 147, in handle_noargs 
index_sql = connection.creation.sql_indexes_for_model(model, self.style) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django_mongodb_engine/creation.py", line 49, in sql_indexes_for_model 
self._handle_oldstyle_indexes(ensure_index, meta) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django_mongodb_engine/creation.py", line 116, in _handle_oldstyle_indexes 
sparse=field.name in sparse_indexes) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/django_mongodb_engine/creation.py", line 42, in ensure_index 
return collection.ensure_index(*args, **kwargs) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/pymongo/collection.py", line 1420, in ensure_index 
self.__create_index(keys, kwargs) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/pymongo/collection.py", line 1298, in __create_index 
sock_info, cmd, read_preference=ReadPreference.PRIMARY) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/pymongo/collection.py", line 208, in _command 
read_concern=read_concern) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/pymongo/pool.py", line 239, in command 
read_concern) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/pymongo/network.py", line 102, in command 
helpers._check_command_response(response_doc, None, allowable_errors) 
File "/Users/<user>/site/qmcdb/lib/python2.7/site-packages/pymongo/helpers.py", line 205, in _check_command_response 
raise OperationFailure(msg % errmsg, code, response) 
pymongo.errors.OperationFailure: The field 'sparse' is not valid for an _id index specification. Specification: { ns: "qmcdb_mongodb.django_admin_log", v: 2, sparse: false, unique: true, name: "_id_1", key: { _id: 1 } } 

我没有想法是什么错误。我一直在试图让MongoDB与Django一起工作,并且我遇到了很多问题。我的settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django_mongodb_engine', 
     'NAME': 'qmcdb_mongodb', 
     'PORT': 27017, 
     'HOST': 'localhost' 
    } 
} 

我希望我已经发布了足够的背景信息。我真的很感激任何帮助。

回答

4

尝试在3.2版本中使用Mongo的数据库,有一些问题mongoengine和蒙戈服务器3.4

+0

您可以参考一些bug报告或MongoDB的 – ppasler

0

我哈克解决方案,这是修改线路从该的Lib\site-packages\django_mongodb_engine\creation.py 115-116:

ensure_index(column, unique=field.unique, 
        sparse=field.name in sparse_indexes) 

对此:

ensure_index(column) 

它似乎清除错误,但我敢肯定它会让某个地方失败灾难性地成为因为我不知道我在做什么。

我会等待一个更好的答案。

+0

的新功能新页[V:2](https://jira.mongodb.org/browse/SERVER-25156)指数版本为3.3创建的索引[严格验证](https://jira.mongodb.org/browse/SERVER-26659)。您可以[setFeatureCompatibility](https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/#dbcmd.setFeatureCompatibilityVersion)db.adminCommand({setFeatureCompatibilityVersion:“3.2”})来禁用更严格的控件或使用3.2 mongo服务器版本。 mongodb-engine在一段时间内还没有发布,以适应更严格的验证。不确定你在找什么。 – Veeram

2

1.在MongoDB版本3.2 3.4中对syncdb进行了测试,但仍然出现错误。

2.在MongoDB 2.6中syncdb运行正常,但存在一个次要的无关问题。我在2.6版本中仍然出现错误,并使用这个错误修复(https://gist.github.com/ielshareef/2986459)。

3.django_mongodb_engine是从django1.3分叉的buggy。此外,这个回购已过时,最后一次提交是在2015年7月13日。我不应该推荐这个包。

4,我会建议https://github.com/MongoEngine/django-mongoengine