2017-05-31 3 views
0

Ich habe eine Verpflichtung einige Datensätze auf der Grundlage der Zeit zum Beispiel filtern hol mir alle Produkte zählen zwischen 201.704 und 201705.Wie kann ich eine Ansicht in Cloudant mit startkey und endkey abfragen, wo key zwei Elemente enthält?

So ist mein emit so etwas wie:

emit([doc.productId, doc.period],1) 

und verwendet reduce _count wird . Aber wenn ich versuche, auf startkey und endkey zu filtern, gibt es mir alle Datensätze. Ich versuche, so etwas wie:

startkey=["201604"]&endkey=[{},"201605"] 

wo meine Schlüsselstruktur so etwas wie Schlüssel ist:

[ 
"aws-60826348802", 
201703 
] 

Ich mag nicht die Reihenfolge der Elemente in Schlüssel umkehren, wie ich eine Zählung auf ids will durch Definition der group_level=1. Könnte mir jemand helfen? Ich habe noch keine Lösung bekommen.

Antwort

1

Um (mit startkey/endkey) auswählen zu können, muss sich Ihr Index in der Reihenfolge in dieser Reihenfolge befinden. Lassen Sie uns sagen, dass Ihre Dokumente wie folgt aussehen:

{ 
    "_id": "someid", 
    "product": "aws-60826348802", 
    "date": "201604", 
    "price": 42.42 
} 

Sie könnten die Dokumente in chronologischer Reihenfolge, wie so eine Map-Funktion zum Index erstellen:

function(doc) { 
    emit([doc.date, doc.product], doc.price); 
} 

Sie haben nun eine zweidimensionale Taste (auf Datum & Produktcode) und der Wert wird ausgegeben ist der Preis.

Auf diese Weise können Sie Einträge nach Datum wählen:

?startkey=["201604"] // find items where the date is >= 201604 
?startkey=["201604"]&endkey=["201605"] // find items in April 2016 

, wenn Sie einen Druckminderer wählen (_count, _sum oder _stats) auch die Aggregation durchführen können:

?startkey=["201601"]&endkey=["201701"]&group_level=1 // find items in 2016, group by month 
?startkey=["201601"]&endkey=["201701"]&group_level=2 // find items in 2016, grouped by month and product code 

Dies könnte Sie bekommen Monatliche Summen von Produktverkäufen, zum Beispiel.

+0

@ Glynn Danke für die Antwort, aber was ich will ist, um die Gesamtzahl der Produkte zwischen zwei Monaten zu erhalten, und dafür muss ich ProductID als ersten Schlüssel und Zeitraum als zweiten Schlüssel setzen. Wenn ich das Schlüsselelement umkehre, gibt es mir die Anzahl der Produktnummern für einen bestimmten Monat. Hoffe, ich bin in der Lage, mein Problem zu erklären .. – MayankMike

Verwandte Themen