2010-01-11 5 views
3

pas exactement ce qu'il faut appeler cela, mais dans SQL je trouve souvent moi-même faire quelque chose comme cela, tout en développant:CouchDB récursives jetables Requêtes

DELETE FROM people WHERE name == "John" 

Ceci est souvent utilisé quand je viens juste d'importer un groupe de données avec un importateur par lots, et que vous voulez effacer quelques résultats, mais pas tout ensemble de données. Comment puis-je faire cela dans CouchDB? Je peux facilement faire une fonction de carte

function(doc) { 
    if (doc.Name == "John") 
     emit(doc._id, null); 
} 

Et puis supprimez les _ids retournés ... mais cela me obligerait à écrire une sorte d'application front-end pour prendre ces _ids et effectuer les suppressions. Parfois, mes requêtes sont beaucoup plus complexes et nécessitent quelques requêtes, suivies d'une suppression, suivie d'une autre requête et d'une mise à jour.

Quelle est la méthode acceptée pour faire ce genre de carte/supprimer et peut-être une carte/mise à jour?

Répondre

2

La méthode exceptée est à peu près la même que celle décrite. Interrogez la vue, puis supprimez les ID renvoyés. Ce n'est pas aussi mauvais que cela puisse paraître. Un script rapide dans votre choix de langue avec une bibliothèque CouchDB et vous êtes simplement en train de déplacer la logique de votre sql dans un langage avec plus de puissance. Certains pourraient considérer cet avantage. YMMV