Tengo esta vista:

function (doc) {
  if (doc.type && doc.type=='accounts') {
    emit( doc._id );
  }  
}

Puedo obtener un json con esta URL:

http://127.0.0.1:5984/crm/_design/accounts/_view/accounts-view?include_docs=true

Mi resultado es:

{"total_rows":3,"offset":0,"rows":[
{"id":"8767d3474a0e80dd0ab7d0b0580065af","key":"8767d3474a0e80dd0ab7d0b0580065af","value":null,"doc":{"_id":"8767d3474a0e80dd0ab7d0b0580065af","_rev":"1-37eb3e76e4715e9a4fc8930470cc4ca3","type":"accounts","lastname":"Kitchen","firstname":"Peter"}},
{"id":"8767d3474a0e80dd0ab7d0b058006e3c","key":"8767d3474a0e80dd0ab7d0b058006e3c","value":null,"doc":{"_id":"8767d3474a0e80dd0ab7d0b058006e3c","_rev":"1-bcab94bb253c83b4951a787c253896f5","type":"accounts","lastname":"Kolner","firstname":"John"}},
{"id":"8767d3474a0e80dd0ab7d0b058008e9a","key":"8767d3474a0e80dd0ab7d0b058008e9a","value":null,"doc":{"_id":"8767d3474a0e80dd0ab7d0b058008e9a","_rev":"1-86078f00be82b97499a0f52488cefbbf","lastname":"Tower","firstname":"George","type":"accounts"}}
]}

Primera pregunta, por qué tengo los campos '_id' y 'key'; ambos son iguales. segunda pregunta, cuando agrego en la URL un parámetro para filtrar por id:

http://127.0.0.1:5984/crm/_design/accounts/_view/accounts-view?include_docs=true&id=8767d3474a0e80dd0ab7d0b0580065af

Obtengo el mismo resultado, ¿cómo debo hacerlo para filtrar por id? Creo que por id es especial porque la base de datos ya está indexada por id, pero ¿qué pasa si obtengo el filtro por otro campo?

Sé que cada vista consume espacio en el disco, entonces puedo resolver todo mi tipo de filtros con una vista y reduce.

0
stackdave 5 dic. 2016 a las 14:13

1 respuesta

La mejor respuesta

Primero, el parámetro de consulta id que usó no es válido. Consulte esta página para ver la lista completa de parámetros de consulta.

En segundo lugar, una vista siempre emite 3 teclas.

  • Id
  • Clave
  • valor

Entonces, si construye una vista que emite la identificación, es completamente inútil.

Es posible que se pregunte: ¿pero por qué emitir la identificación y la clave?

Imagine un escenario en el que construye un mapa / reduce el número de teléfono de cada persona. Podrá obtener todos los documentos de un determinado número de teléfono. Por razones de indexación, debe mantener un vínculo entre los valores / claves emitidos con una identificación de documento. Si actualiza el documento, la vista debe actualizarse, por lo que sin ninguna identificación, eso sería imposible.

1
Krish Munot 5 dic. 2016 a las 17:58