couchDB: представление, что NOT NULL прибыли оценивает, doesn' t возвращают Нулевые значения

У меня есть couchDB база данных с 2 типами документов. У документа A есть x пункты, у документа b есть-y пункты.

У каждого продукта есть ID, единый документ A, и многие Документируют Б, связался с ним. (думайте о нем как инвентарь. Документ A имеет сколько пунктов в начале. Документ B представляет продажу/поломку и т.д.).

Я должен произвести представление, которое возвращает id всех продуктов с положительной суммой пунктов.

Я написал, что карта уменьшает как так:

КАРТА:

function(doc) {
 if (doc.Type === "Delivery") {

      emit(doc.ProductID, doc.Items );
    }
  if (doc.Type === "Sale") {
        emit(doc.ProductID, -(doc.Items));
    }
}

УМЕНЬШИТЕ:

function(keys, values) {
    var total =  sum(values);
    if (total > 0) {
        return total
    }
}

Когда подвергнуто сомнению, это возвращает большое Нулевые значения для продуктов, которые мы не имеем в запасе. Это возвращает положительные числа для тех, которых мы имеем.

Если я подвергаю сомнению это представление, я добираюсь , огромные список {productID: ПУСТОЙ УКАЗАТЕЛЬ} пары.

Я использовал Список, который просто не возвращает вещи с ПУСТЫМ УКАЗАТЕЛЕМ стоимости, но этому, кажется, нужно восстановление каждый раз, когда представление обновляется. Я добавляю одну стоимость, и она проходит строительство целого списка. Это начинает занимать довольно долгое время, и кажется, что это продолжит занимать больше времени, когда база данных растет в размере.

Есть ли способ просто возвратить id представления, у которых нет Нулевых значений? (как NOT NULL sql). Или, кто-либо знает наиболее успешную практику для этой ситуации?

0
nl ja de
Как точно вы подвергаете сомнению представление? Что group_level вы используете?
добавлено автор Marcin Skórzewski, источник
Я думаю там не очень, можно сделать, и необходимо будет фильтровать его в клиенте. BTW. Ваш уменьшают является детской коляской так или иначе. Нанесите на карту/уменьшите должно быть детерминировано и не зависеть от заказа, уменьшают/повторно уменьшают. Возьмите множество [0,0,-10,0,0,0,0,30] . Очевидно, сумма - 20 , но , уменьшают будет выполнен в заказе: сначала уменьшите [0,0,-10,0] и [0,0,0,30] , и затем повторно уменьшите предыдущих просьб, тогда результат будет сумму ([пустой указатель, 30]) =30 !
добавлено автор Marcin Skórzewski, источник
с ajax вариантами:
добавлено автор ddouglascarr, источник
Извините, случайно представленный. С group=true или group_level=1 и reduce=true. например: завиток-X ДОБИРАЕТСЯ localhost:5984/testDatabase / _ проектируют/проверяют / _ view/…
добавлено автор ddouglascarr, источник