django-nonrel syncdb and mongodb: pymongo.errors.OperationFailure
Asked Answered
C

4

7

I am using django-nonrel with mongodb-engine I am getting the following error when I run python manage.py syncdb:

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 } }

I have no idea what is wrong. I've been trying to get mongodb to work with django and I have been having a lot of issues. My settings.py:

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

I hope I have posted enough background information. I would really appreciate any help.

Concavoconvex answered 12/12, 2016 at 4:1 Comment(0)
F
4

Try use Mongo database in version 3.2, There is some problem with mongoengine and Mongo Server 3.4

Flashover answered 5/1, 2017 at 11:52 Comment(1)
You could refer to some bug report or new features pages of MongoDBAnnapolis
M
2

1.Tested syncdb in MongoDB version 3.2 3.4, it still raising error.

2.In the MongoDB 2.6 syncdb is running fine with a minor unrelated problem.I still got an error in version 2.6 and fixed with this(https://gist.github.com/ielshareef/2986459).

3.django_mongodb_engine is so buggy which was forked from django1.3 . Also, this repo is outdated that last commit was on Jul 13, 2015. I should not recommend this package.

4.I would recommend https://github.com/MongoEngine/django-mongoengine

Merras answered 21/6, 2017 at 4:55 Comment(0)
H
0

My hacky solution to this was modifying lines 115-116 of Lib\site-packages\django_mongodb_engine\creation.py from this:

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

to this:

ensure_index(column)

It seems to clear the error, but I'm sure it's gonna make something somewhere fail catastrophically because I have no idea what I'm doing.

I'll be waiting on a better answer too.

Hettie answered 20/6, 2017 at 11:56 Comment(1)
New v:2 index version for indexes created in 3.3 with stricter validation. You can either setFeatureCompatibility db.adminCommand( { setFeatureCompatibilityVersion: "3.2" } ) to disable the stricter controls or use 3.2 mongo server version. mongodb-engine has not had a release in a while to accommodate for stricter validation. Not sure what you are looking for.Ichthyic
B
0

I recommend you use:

pip3 install git+https://github.com/MongoEngine/django-mongoengine
Django 1.11.2
Python 3.6
MongoDB 3.4

Always is good, use versions updated of packages, use isolation of environment. https://virtualenvwrapper.readthedocs.io/en/latest/install.html

Braley answered 27/6, 2017 at 1:37 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.