2016-12-12 57 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