2012-03-13 9 views
23

tengo esto en mi función de vista:couchdb o filtrado en la matriz clave

emit([doc.address.country,doc.address.state, doc.address.city], doc); 

Cuando consultar la búsqueda, tengo que tener los 3 elementos de la matriz rellenado, por ejemplo:

?key=["US","NY","New York"] 

que producirá mis discos, pero digamos que, por ejemplo, sólo quiero volver todo en los EE.UU., por ejemplo:

?key=["US"] 

o en los EE.UU. y el Estado ...

?key=["US","NY"] 

O ... digamos que tal vez sólo quiero todos los registros de NY ... (sé que el siguiente no funciona)

?key=["","NY"] 

¿Realmente no entiendo cómo buscar si quieres dejar vacío uno de los elementos de la matriz?

Respuesta

42

Primero:

clave = [ "US"] no funcionará en una matriz clave [ "US", "NY"], porque estás en busca de una llave que es exacto [ "de EE.UU. "]. En su lugar, usted tiene que utilizar

startkey=["US"]&endkey=["US",{}] 

entonces esas llaves están en el conjunto de resultados:

["DE","Bavaria","Munich"] <---- NO ! "DE" is out of Range of startkey 
["US","FL","Miami"]   <---- YES, starts with "US" 
["US","NY","New York"]  <---- YES, starts with "US" 
["VE","XX","Vencuela City"] <---- NO ! "VE" is out of Range of endkey 

También trabajo:

startkey=["US","FL"]&endkey=["US","FL",{}] 

resultado:

["DE","Bavaria","Munich"] <---- NO ! "DE" is out of Range of startkey 
["US","FL","Miami"]   <---- YES, starts with "US","FL" 
["US","NY","New York"]  <---- NO, "US","NY" is out of Range of endkey 
["VE","XX","Vencuela City"] <---- NO ! "VE" is out of Range of endkey 

Segundo: No se puede tener espacios en blanco en el lado izquierdo .. lo que tiene que escribir más emite: (que no tiene que emitir el segundo y tercer elemento de la matriz, si no es necesario consultarlo)

vista "byStateCityCountry":

emit([doc.address.state, doc.address.city,address.country], doc); 

vista "byCityStateCountry":

emit([address.city,doc.address.state, doc.address.country], doc); 

de sólo hay que poner una bandera en el primer lugar para determinar el tipo de consulta, por lo que se puede hacer todo en uno vista:

emit([1,address.country,doc.address.state, doc.address.city], doc); 
emit([2,doc.address.state, doc.address.city,address.country], doc); 
emit([3,address.city,doc.address.state, doc.address.country], doc); 

Uso:

?startkey=[1,"US"]&endkey=[1,"US",{}] 
?startkey=[2,"FL"]&endkey=[2,"FL",{}] 
?startkey=[3,"Miami"]&endkey=[3,"Miami",{}] 
+0

Nota: "Usted no puede tener espacios en blanco en el lado izquierdo ..." - Creo que lo contrario es cierto si usted ha descendente = true – Matt

+2

Sé que esto es viejo, pero También debe tenerse en cuenta que si su conjunto de teclas tiene muchos elementos, se vuelve más complejo. suponiendo los datos siguientes en la vista con estas teclas: 'startkey == [a, 11] y endkey == [c, 11]:' ' [a, 10], [a, 11] < - startkey, [a, 12], [b, 10], [b, 11], [b, 12], [c, 10], [c, 11] <- endkey, [c, 12] ' (Se devolverá todo entre la tecla de inicio y la tecla de finalización). – AdriVelaz

Cuestiones relacionadas