Самое близкое, к чему вы придете, это использовать представление и отфильтровать ленту изменений на основе этого представления - подробности см. В [1].
Вы можете создать простое представление, включающее «версию» как часть ключа, используя функцию карты, такую как:
function (doc) {
emit(doc.version, 1);
}
Фид изменений, отфильтрованный этим представлением, уведомит вас о вставке или удалении документов, имеющих поле «версия», а также об изменениях в поле «версия» существующих документов. Однако вы не можете определить предыдущее значение поля «версия» из ленты изменений.
В зависимости от ваших требований вы можете сделать вид более точным. Например, если вы заботитесь только о переходе от формы «A» к «B», то вы можете включить только те документы, которые имеют «A» или «B» в качестве «версии»:
function (doc) {
if( doc.version === "A" || doc.version === "B") {
emit(doc.version, 1);
}
}
Но имейте в виду, что это не вызовет уведомление об изменении при переходе, скажем, с «A» на «C» (или любое другое значение для «версии», в том числе при удалении документа), поскольку уведомления об изменениях отправляются только когда функция карты emit () имеет хотя бы одно значение для документа. Он не уведомляет вас, когда функция карты , используемая для , генерирует хотя бы одно значение для данного документа, но больше не делает!
Вы также можете фильтровать ленту изменений, используя селекторы Mango, поэтому, если запросы Mango работают для вас, возможно, это проще, чем использование представления, но я не уверен, что вы можете получать уведомления об удалениях с помощью селекторов Mango ...
EDIT:
Заявление о простой функции карты, приведенной выше, может быть не совсем правильным, поскольку оно будет уведомлять вас обо всех вставках и удалениях документов, а не только о полях «версия». Вы можете сделать это, чтобы избежать ложных срабатываний:
function (doc) {
if ( doc.hasOwnProperty( 'version' ) || doc.hasOwnProperty( '_deleted' ) ) {
emit(doc.version, 1);
}
}
Это даст уведомления о новых документах с полем «версия» или обновлении, которое добавляет поле «версия» к существующему документу, но все равно будет уведомлять обо всех удалениях.
[1] http://docs.couchdb.org/en/stable/api/database/changes.html#changes-filter-view