2017-09-26 7 views
0

J'ai importé la base de données de films-démo IMDB sur mon instance CouchDB et je suis en train d'apprendre à propos de Mango en utilisant des tutoriels et des références de Cloudant.comment exclure certains documents de la requête Cloudant (ou Mango)?

J'ai écrit cette requête pour identifier des documents dans lesquels le nom de l'acteur est comme "bruce". Maintenant, je veux modifier cela pour exclure certains documents du jeu de résultats. Par exemple Movie_name <> 'Monster'.

Est-ce possible et, si oui, quelqu'un peut-il m'aider à comprendre comment faire?

{"selector": 
    {"_id": 
    {"$gt": null}, 
    "Person_name": {"$regex": "(?i)bruce"} 
    } 
} 

Répondre

1

Il est opérateur $ne qui peut être utilisé pour faire correspondre les documents qui ne sont « pas égal à » une valeur donnée.

{ 
    "selector":{ 
    "_id": {"$gt": null}, 
    "Person_name": {"$regex": "(?i)bruce"}, 
    "Movie_name": { "$ne": "Monster" } 
    } 
} 

Une mise en garde: l'utilisation de $regex dans une requête n'est pas une recette pour une grande performance, car elle oblige les inévitables CouchDB faire une analyse manuelle de tous les documents dans la base de données, plutôt que de profiter d'un indice pré-construit. De même, l'opérateur $ne a des caractéristiques de performance similaires. La pratique recommandée avec une base de données Cloudant (un service CouchDB hébergé) consiste à créer un index type=text sur les champs que vous interrogez. Cet index vous permettra d'utiliser l'opérateur $text dans vos requêtes à la place de votre expression régulière, ce qui devrait être beaucoup plus efficace.