Как удалить EmbeddedObject из ListField? - PullRequest
0 голосов
/ 09 марта 2012

У меня есть этот код:

Элемент класса (models.Model): objects = MongoDBManager ()

fav_members = ListField(EmbeddedModelField('Member')) 

def del_fav_with_pymongo(self, fav):
    from pymongo import Connection
    from django.conf import settings

    conn = Connection(settings.DATABASES['default']['HOST'])
    db = conn[settings.DATABASES['default']['NAME']]

    db.base_member.update({"_id": ObjectId(self.id)}, {"$pull": {"fav_members": {"_id": ObjectId(fav.id)}}})

def del_fav_with_MongoDBManager(self, fav):

    Member.objects.raw_update({"_id": ObjectId(self.id)}, {"$pull": {"fav_members": {"_id": ObjectId(fav.id)}}})

Ни метод del_fav_with_pymongo (), ни del_fav_with_MongoDBManager не извлекают пользу.

Пожалуйста, кто-нибудь с ответом ???

Ответы [ 2 ]

0 голосов
/ 28 августа 2012

Если вы посмотрите на базу данных, то увидите, что экземплярам EmbeddedModelField автоматически не присваивается _id. Используйте определенный атрибут fav, чтобы указать, который нужно удалить, или используйте индекс позиции в ListField.

0 голосов
/ 09 марта 2012

Отправленный вами запрос на монго является правильным - я думаю, что из-за того, что встроенные объекты не добавили поле _id, добавленное монго, хэш запроса, заданный для pull, ничему не соответствует.

Можете ли вы использовать определенный атрибут fav?

...