django-mongoengine
django-mongoengine copied to clipboard
can't pull from embedded document field
django-mongoengine==0.3.3
mongoengine==0.17.0
I have the following models in a Django app:
from django_mongoengine import Document, EmbeddedDocument, fields
class TestEmbModel(EmbeddedDocument):
list_of_strings = fields.ListField(fields.StringField(), blank=True)
class TestModel(Document):
some_embedded_doc = fields.EmbeddedDocumentField('TestEmbModel', blank=True)
When using:
a=TestModel()
a.save()
This works:
a.update(add_to_set__some_embedded_doc__list_of_strings='abc')
This does not work:
a.update(pull__some_embedded_doc__list_of_strings='abc')
---------------------------------------------------------------------------
OperationError Traceback (most recent call last)
<ipython-input-1-3e6ce99e224a> in <module>()
14
15 a.update(add_to_set__some_embedded_doc__list_of_strings='abc')
---> 16 a.update(pull__some_embedded_doc__list_of_strings='abc')
/Users/dblado/.virtualenvs/vendop/lib/python2.7/site-packages/mongoengine/document.pyc in update(self, **kwargs)
593
594 # Need to add shard key to query, or you get an error
--> 595 return self._qs.filter(**self._object_key).update_one(**kwargs)
596
597 def delete(self, signal_kwargs=None, **write_concern):
/Users/dblado/.virtualenvs/vendop/lib/python2.7/site-packages/mongoengine/queryset/base.pyc in update_one(self, upsert, write_concern, full_result, **update)
592 write_concern=write_concern,
593 full_result=full_result,
--> 594 **update)
595
596 def modify(self, upsert=False, full_response=False, remove=False, new=False, **update):
/Users/dblado/.virtualenvs/vendop/lib/python2.7/site-packages/mongoengine/queryset/base.pyc in update(self, upsert, multi, write_concern, full_result, **update)
541 message = u'update() method requires MongoDB 1.1.3+'
542 raise OperationError(message)
--> 543 raise OperationError(u'Update failed (%s)' % six.text_type(err))
544
545 def upsert_one(self, write_concern=None, **update):
OperationError: Update failed (Cannot apply $pull to a non-array value)
If I change Document, EmbeddedDocument to use mongoengine instead of django_mongoengine it works:
from mongoengine import Document, EmbeddedDocument, fields
I think this is related to MongoEngine/mongoengine#1534