2016-04-10 3 views
2

Ich habe Dokumente mit Datum und Name FelderCouchDB Suche nach Stichworten und Filter nach Datum und zu einem gleichzeitig

{ 
 
    date: '2015-07-16T09:18:36.660Z', 
 
    name: 'australia' 
 
}, 
 
{ 
 
    date: '2015-08-12T19:11:11.320Z', 
 
    name: 'austria' 
 
}, 
 
{ 
 
    date: '2016-01-14T12:59:26.120Z', 
 
    name: 'italy' 
 
}, 
 
{ 
 
    date: '2019-04-28T17:42:10.520Z', 
 
    name: 'spain' 
 
} 
 

Meine Karte funktioniert wie folgt aussieht

function(doc) { 
 
    emit(doc.date, doc); 
 
}

Ich kann einen Datumsbereich angeben mit? Startkey = "2015-01-01T00: 00: 00Z" & endkey = "2017-09-01T00: 00: 00Z" und das funktioniert ok, aber ich würde auch gerne nach Schlüsselwort innerhalb angegeben suchen Datumsbereich, sagen wir mal zusätzlich zu dem oben genannten Bereich möchte ich alle Artikel mit Namen mit „au“ ab

Antwort

0

Sie benötigen-view-Funktion, um etwas zu ändern, wie,

function(doc) { 
    emit([doc.date, doc.name], null); 
} 

Dann können Sie etwas tun, wie,

startkey=["2015-01-01T00:00:00Z,"au"]&endkey=["2017-09-01T00:00:00Z","au\ufff0"] 

Natürlich müssen Sie json-encodieren th Ose Schlüsselwerte.

+0

Das geht nicht, weil CouchDB die Tasten von links nach rechts abgleicht, so dass die zweite Taste "au" übersprungen wird. Jedes Land wird übereinstimmen, wenn sie sich im Datumsbereich befinden. – 7ictor

1

Ich glaube nicht, dass dies in der CouchDB aktuell 1.6 out of the box möglich ist.

Es gibt einen Patch von Jamie Talbot beschrieben in einer blog post und einige weitere Diskussion in CouchDB's JIRA, mit der endgültigen Lösung nur für 2.0, die erreicht, was Sie fragen.

Zusätzlich gibt es eine neue query language für CouchDB erstellt als eine offizielle Cloudant Query Sprache, die auch in CouchDB 2.0 verwendet wird.

Das heißt, wenn Cloudant oder CouchDB 2.0 verwendet wird, würde ich empfehlen, die viel bessere Abfragesprache zu verwenden.

Zuerst sollten Sie die Indizes erstellen, POST ing den Index Beschreibung auf den _index Endpunkt:

{ 
    "index": { 
    "fields": [ 
     "date", 
     "name" 
    ] 
    }, 
    "type": "json" 
} 

Dann können Sie die neue Abfrage-API verwenden, POST ing JSON zum _find Endpunkt. Ein Beispiel mit den Kriterien gefragt Sie:

{ 
    "selector": { 
    "date": { 
     "$gt": "2015-01-01T00:00:00Z", 
     "$lt": "2017-09-01T00:00:00Z" 
    }, 
    "name": { 
     "$gt": "au", 
     "$lt": "au\ufff0" 
    } 
    } 
} 

Es wird implizit eine $and um die date und name Selektoren. Weitere Informationen finden Sie in den obigen Links.

Verwandte Themen