2017-09-19 4 views
1

Est-ce que CouchDB peut renvoyer les documents qui ne répondent pas à certains critères de filtrage? J'utilise l'API Python et fourni un exemple ci-dessous:Comment faire une requête pour des résultats négatifs dans CouchDB (Python)

couch['test_db'].view('doc/entrybyname', key=value, include_docs=True) 

dit que je voulais tous les documents qui ne correspondaient pas à la value clé ... ne CouchDB offre une façon de le faire?

À l'heure actuelle, je reçois tous les documents plutôt que de les filtrer selon les besoins, ce qui est très inefficace, surtout au fur et à mesure que la taille de la base de données augmente.

Merci pour votre aide à l'avance.

Brian

Répondre

2

Il n'y a aucun moyen de renvoyer des données à partir d'un qui est pas dans un index, seules les données est dans l'index. Le mécanisme Mango/Query ne vous permet d'effectuer des requêtes telles que celle-ci:

{ 
    "selector": { 
    "country_code": { "$ne": "UK"} 
    } 
} 

qui se lit comme « trouver mon tous les documents où country_code n'est pas égal à« Royaume-Uni », mais la requête ne serait pas alimenté par un index - cela nécessiterait une analyse de tous les documents - donc ne serait pas performant pour les grands volumes de données.

En fonction de votre cas d'utilisation, vous pouvez créer un index de mappage/réduction personnalisé qui inclut uniquement les documents qui vous intéressent, par ex.

function(doc) { 
    if (doc.country_code != 'UK') { 
    emit(doc.country_code, null); 
    } 
} 

qui crée un index de tous les documents qui ne sont pas au Royaume-Uni, calée sur le code du pays.