2011-03-29 2 views
1

Utilisez le code suivant, supprimez le document spécifié.Perl mongodb supprimer la question de l'enregistrement

sub delete_post{ 
my $post_id = shift; 
my $post_to_delete = $posts->find_one({"_id" => $conn->oid($post_id)})->{_id}; 
$posts->remove({"_id" => $post_to_delete}); 

}

si on utilise ce code:

sub delete_post{ 
my $post_id = shift; 
$posts->remove({"_id" => $conn->oid($post_id)}); 

}

supprimer tous les documents.

mongodb ne peut pas accepter l'oid comme critère pour supprimer un document?

+0

Pourquoi avez-vous besoin '$ conn-> oid'? Est-ce que ce qui suit ne fonctionne pas? '$ posts-> remove ({" _id "=> $ post_id});' –

+0

Désastre. La première méthode, retirer au hasard un document ou supprimer tous les documents. La deuxième méthode, n'en supprime aucune. – Weiyan

+0

[link] (http://stackoverflow.com/questions/5480645/pel-mongo-coll-find-one-id-xxxx-method-not-fonction-as-expected) est une autre question sur l'utilisation non sécurisée _id comme clé dans la méthode de recherche. – Weiyan

Répondre

2

Utilisez la méthode MongoDB :: OID pour créer l'objet _id au lieu de $ conn-> oid;

sub delete_post{ 
my $post_id = shift; 
my $oid = MongoDB::OID->new(value => $post_id); 
$posts->remove({"_id" => $oid}); 
$db->log->insert({"removed_post" => $post_id}); 

}