2012-03-09 1 views
0

Je possède ce code:comment supprimer un EmbeddedObject à partir d'un ListField?

Membre de classe (models.Model): objets = MongoDBManager() Méthode

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

Ni del_fav_with_pymongo(), ni del_fav_with_MongoDBManager tire les fav.

S'il vous plaît n'importe qui avec la réponse ???

+0

Pouvez-vous poster un exemple de document? –

Répondre

0

La requête mongo que vous avez publiée est correcte - je suppose que parce que les objets incorporés n'ont pas de champ _id ajouté par mongo, le hachage de requête donné à tirer ne correspond à rien.

Pouvez-vous utiliser un attribut spécifique de fav?

0

Si vous regardez la base de données, vous verrez que les instances de EmbeddedModelField ne reçoivent pas automatiquement un _id. Utilisez un attribut spécifique de fav pour spécifier les éléments à supprimer ou utilisez l'index de position dans ListField.

Questions connexes