2010-07-09 11 views
16

He estado tratando de descubrir cómo crear una vista CouchDB que me permita consultar todos los documentos que tienen una fecha de inicio mayor que A y una fecha de finalización inferior a B.Consultar documentos CouchDB entre una fecha de inicio y una fecha final

¿Es esto posible en CouchDB u otro almacén de documentos noSQL? ¿Debería eliminarlo y volver a SQL?

Simplemente estoy tratando de hacer el equivalente de SQL:

SELECT * DONDE [start marca de tiempo]> = doc.start Y [marca de tiempo final] < doc.end;

+0

duplicados, consulte http://stackoverflow.com/questions/3079040/range-keys-in-couchdb-views –

+0

@PartlyCloudy no veo cómo esta pregunta es una víctima de tu pregunta. Su pregunta genera un montón de eventos a intervalos regulares en algún rango, mientras que esto busca encontrar todos los valores entre algún rango. Podría estar utilizando su solución incorrectamente, pero no lo creo. – jfenwick

Respuesta

0

Use startkey and endkey. De esta forma, puede decidir su rango de fechas en tiempo de ejecución sin ralentizar su consulta.

8

Basta con crear un mapa como este:

function (doc) {emit(doc.timestamp, 1)} 

continuación, consulte la vista con:

?descending=true&limit=10&include_docs=true // Get the latest 10 documents 

La vista se ordenará la más antigua a más reciente por lo descending=true invierte ese orden.

Si desea un rango específico.

?startkey="1970-01-01T00:00:00Z"&endkey="1971-01-01T00:00:00Z" 

le conseguiría todo en 1970.

Estos deben ayudar:

+7

Esto no funcionaría porque hay dos variables diferentes, doc.start y doc.end. – jfenwick

+0

Presentó una función anon como respuesta, pero está completamente fuera de contexto porque no dijo dónde o cómo ubicarla, ni a qué asignarla, ni cómo o qué lo llama. Quiero decir, ¿lo asigno a una var en el documento? ¿Lo coloco en el documento desnudo y sin asignar? Tal vez no va en el documento en absoluto? Quién sabe. – ekerner

3

Uso de una clave de la matriz en su función de mapa

function (doc) { 
    var key = [doc.start, doc.end] 
    emit(key, doc) 
} 

continuación para obtener documentos con una mayor fecha de inicio y luego 1970-01-01T00: 00: 00Z y una fecha final antes 1971-01-01T00: 00 : 00Z utilizar la consulta

?startkey=["1970-01-01T00:00:00Z", ""]&endkey=["\ufff0", "1971-01-01T00:00:00Z"] 
+2

¿Qué magia hace aquí la primera parte de la tecla de finalización? "\ ufff0" ¿Es igual a una fecha en el futuro infinito? – mtnpaul

+0

@noah esto no parece filtrar la parte de fecha de finalización, si la fecha de inicio coincide, por lo que con la tecla de finalización – wprater

Cuestiones relacionadas