2016-02-27 3 views
0

Я пытаюсь создать представление couchbase, которое извлекает идентификаторы всех просмотров, которые не были обновлены более одного месяца. Они также не должны иметь идентификатор строки в их ключе:Couchbase просмотреть документы старше одного месяца

function (doc, meta) { 

    if (meta.id.indexOf("ID") == -1) { 
    var currentDate = new Date(); 
    var currentDateInMillis = currentDate.getTime(); 
    if (doc.lastTimestampMillis != null && doc.lastTimestampMillis < (currentDateInMillis - (30 * 24 * 60 * 60 * 1000))) { 
     emit(meta.id, meta.id) 
    } 
    } 
} 

Обратите внимание, что у меня есть поле lastTimestampMillis в моем документе.

Ну, этот код не работает.

ответ

2

Вместо того, чтобы внедрять логику проверки дат в коде просмотра, просто введите doc.lastTimestampMillis, а затем запросите даты, которые вы хотите. Например. query.endkey(<now - 30d>) предоставит вам все временные метки до 30 дней назад. Поскольку испускаемое значение обновляется только при изменении документа, представление, которое вы написали, становится почти неизменным. Преимущество выдачи только временной отметки заключается в том, что вы можете запросить любой диапазон дат, а также фактически отражать правильные временные метки в любое время.

+0

Но это вызовет представление, которое содержит почти все документы в ведре? –

+0

Он не будет содержать документы, только метки времени и документы. Но да, у него будет столько элементов, сколько есть документов с меткой времени. Если у вас есть миллиарды документов, это может быть много. Но это самый надежный способ сделать то, что вы хотите. –

Смежные вопросы