2011-04-07 10 views
9

¿Es posible acceder a los parámetros querystring de las solicitudes en una vista?CouchDB - Acceder a los parámetros de la querystring en las vistas

Considere esta solicitud ... GET/database/_designs/foo/?bar=1

Y este mapa ...

views { 
    foo: { 
     map: function (document) 
     { 
      // I want to access querystring parameter "bar" here! But how? 


      // I'd like to be able to do something along the lines of... 

      if (bar > 0) emit(null, document); 
     } 
    } 
} 

Respuesta

14

De http://sitr.us/2009/06/30/database-queries-the-couchdb-way.html:

El diseño CouchDB le consigue gran rendimiento en grandes conjuntos de datos. Pero significa que no puede pasar los parámetros dinámicos a su función de mapa cuando ejecuta una consulta. No puede solicitarlo para emitir solo registros de usuario con un apellido dado a menos que desee mantener una vista especial para ese apellido particular . En la mayoría de los casos no es práctico construir vistas separadas para cada consulta que desee ejecutar algún día. Entonces, lo que puede hacer es ejecutar una consulta en contra de la vista general de y solicitar solo pares de clave/valor que coincidan con una clave particular.

function find_users_by_last_name(db, last_name) { 
    var matches; 
    matches = db.view('users/last_names', { key: last_name }); 
    return matches.rows.map(dot('value')); 
} 

Así que no, pero se puede consultar en una vista.

+0

Solo se le permite transferir un parámetro ("clave") cuando se realiza una consulta en una vista. ¿Estoy en lo cierto? ¿O puedes pasar claves personalizadas? – roosteronacid

+0

Hay una explicación más profunda de la forma en que esto funciona en [CouchDb: The Definitive Guide] (http://guide.couchdb.org/editions/1/en/cookbook.html#key). También tiene ejemplos non-couch.js que usan cadenas de consulta. La wiki de CouchDb tiene una lista completa de parámetros de consulta .: http://wiki.apache.org/couchdb/HTTP_view_API?action=show&redirect=HttpViewApi#Querying_Options – Tayler

4

La vista está precalculada y, por lo tanto, no puede tomar los parámetros de cálculo. Entonces, el único parámetro que puede usar para consultar la vista es una tecla o un rango para recuperar solo un subconjunto de la misma. Entonces, lo que puede hacer es usar list function para hacer más cosas a la vista. Difícil de decir sin saber más acerca de lo que quiere lograr. Si desea consultas realmente dinámicas en CouchDB, puede utilizar vistas temporales, pero puede ser bastante lento ya que se le pasarán todos los documentos en la base de datos.

Cuestiones relacionadas