Я пытаюсь углубить свое понимание CouchDB и того, как моделировать данные для некоторых реальных сценариев.Я сделал столько, сколько смогу, «покажи мне сообщения в блоге по дате»;)
Имеются такие документы:
{
"_id": "couch1",
"_rev": "2-338d0a592ad1e5570000002b00000000",
"eventType": "event1",
"date": 1328805860000
}
{
"_id": "couch2",
"_rev": "1-1e0315c2e1ca7f5f0000002b00000000",
"eventType": "event1",
"date": 1328133600000
}
{
"_id": "couch3",
"_rev": "1-154cd416b78cb2ef0000002b00000000",
"eventType": "event2",
"date": 1325434920000
}
Где дата - эпохаМожно ли попросить Кауча сделать представление, где вы запрашивали все «события», произошедшие между двумя метками времени, а затем сгруппировать эти данные по «eventType»?
Итак, используя вышеизложенное и предполагаяпереданные метки времени охватывают эти документы - мы бы хотели видеть вывод:
"event1": 2
"event2": 1
Дополнительная информация, которую я получил
Я знаю, что Couch будет сортироватьпо ключу, так что если бы я хотел получить «топ-10», то это был бы второй этап, но я справлюсь с этим.
Итак, основная проблема здесь в том, что вы фильтруете по одному столбцу, а затем группируете по другому?
Если мы используем следующую функцию карты:
function (doc) {
emit([doc.date, doc.eventType], doc.eventType);
}
с функцией уменьшения count
, мы видим, что, поскольку временные метки по сути уникальны, Couch не может группировать, а ключ имеет значение 1.
Таким образом, вы можете изменить функцию карты на тон следующее:
function (doc) {
emit([doc.eventType, doc.date], doc.eventType);
}
А затем измените group level
на 1, который будет сгруппирован правильно по событию, но ваши данные не могут быть разрезаны по времени, потому что ваш основной порядок - по имени события, то есть порядок временисейчас сломан?
Есть ли у людей какие-либо военные истории по этому поводу?Нужно ли это делать с помощью повторного уменьшения?
Большое спасибо всем, кто нашел время, чтобы прочитать это
Яйцо