如何从ListField中删除EmbeddedObject?

时间:2012-03-09 14:52:10

标签: mongodb pymongo django-nonrel

我有这段代码:

类成员(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 :(得分:0)

你发布的mongo查询是正确的 - 我的猜测是因为嵌入的对象没有由mongo添加的_id字段,给予pull的查询哈希不匹配任何内容。

你能使用fav的特定属性吗?

答案 1 :(得分:0)

如果查看数据库,您将看到EmbeddedModelField实例未自动获得_id。使用fav的特定属性指定要删除的内容,或使用ListField中的位置索引。