2015-03-20 2 views
0

J'ai des documents qu'ils ont cette structure:Documents Trouver tableau CouchDB

{id: ####, 
rev: ####, 
"Cam_name": "Camera SX", 
"colour": "white", 
"manufacturer": "Sony", 
"rec_limit": 180, 
"Customer": ["Mike","Ann","James"] 
} 

{id: ####, 
rev: ####, 
"Cam_name": "PXSV CAM", 
"colour": "white", 
"manufacturer": "LG", 
"rec_limit": 144, 
"Customer": ["Mike","Oliver","Mr. Rain"] 
} 

{id: ####, 
rev: ####, 
"Cam_name": "LxSV Double", 
"colour": "white", 
"manufacturer": "Phillips", 
"rec_limit": 160, 
"Customer": ["Mike"] 
} 

Et je veux faire une requête de la fonction MAP où je peux voir TOUS Cam_Names qui utilise le client Mike. J'ai une fonction de carte Simillar mais cela montre seulement le Cam_Name LxSV Double et seulement le client Mike. Je veux montrer tous les Cam_Names que Mike utilise.

MaRequête:

function(doc){ 
if(doc.Customer == "Mike"){ 
emit(doc.Cam_name, doc.Customer) 

Cette requête me donne pas le bon résultat.

Répondre

2

Si votre requête ressemble exactement comme ça, alors vous avez une erreur de syntaxe. Mais aussi, doc.Customer est un tableau, donc vous ne pouvez pas faire un simple contrôle d'égalité.

Mais vérifier l'existence d'une valeur d'un tableau est totalement inutile, votre fonction de la carte peut simplement ressembler à ceci:

function (doc) { 
    doc.Customer.forEach(function (customer) { 
    emit(customer, doc.Cam_name); 
    }); 
} 

Ensuite, interrogez votre point de vue avec /{db}/_design/{ddoc}/_view/{view}?key="Mike"

Votre sortie ressemblera :

{ 
    "total_rows": 3, 
    "offset": 0, 
    "rows": [ 
    { 
     "id": "####", 
     "key": "Mike", 
     "value": "Camera SX" 
    }, 
    { 
     "id": "####", 
     "key": "Mike", 
     "value": "PXSV CAM" 
    }, 
    { 
     "id": "####", 
     "key": "Mike", 
     "value": "LxSV Double" 
    } 
    ] 
} 

maintenant, vous pouvez utiliser ce même point de vue pour trouver un client, pas seulement qui vous indiquez dans votre fonction de la carte.

+0

comment puis-je l'interroger? – Relaxo

+0

J'utilise seulement un futon. – Relaxo

+0

Qu'entendez-vous par là? Futon est une interface d'administration, ce n'est pas vraiment destiné à être un outil de requête polyvalent. Quelle version de CouchDB utilisez-vous? Si vous êtes sur une version assez récente, vous pouvez consulter le remplacement de Futon, qui est appelé [Fauxton] (http: // localhost: 5984/_utils/fauxton /). Il offre un moyen d'ajouter des paramètres de requête lors de la navigation dans les vues. –