couchDB:NOT NULL値を返すビュー、NULL値を返さないビュー

私は2種類のドキュメントを持つcouchDBデータベースを持っています。ドキュメントAにはx個のアイテムがあり、ドキュメントbには-y個のアイテムがあります。

各製品には、ID、単一のドキュメントA、およびそれに関連する多くのドキュメントBがあります。 (それは在庫のように考えてください。文書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
    }
}

照会すると、これは在庫がない製品のNULL値を大量に返します。私たちが持っているものに対して正の数を返します。

このビューに問い合わせると、{em>巨大なの{productID:NULL}のペアのリストが表示されます。

私はListを使用しました。値はNULL値で返されませんが、ビューが更新されるたびに再構築が必要なようです。私は1つの価値を追加し、それは全体のリストを構築することを経る。かなり長い時間がかかり始めており、データベースのサイズが大きくなるにつれて時間がかかるようです。

NULL値を持たないビューのidを返す方法はありますか? (NOT NULLはSQLと同じです)。 または、誰もこの状況のベストプラクティスを知っていますか?

0
どのように正確にビューに問い合わせますか?どの group_level を使用しますか?
追加された 著者 Marcin Skórzewski,
あなたができることはあまりありませんし、クライアントでフィルタリングする必要があります。 BTW。あなたの reduce はとにかくバグです。マップ/リダクションは、決定論的でなければならず、リダクション/リダクションの順序に依存しません。 [0,0、-10,0,0,0,0,30] の配列を取ってください。明らかに、合計は 20 ですが、 [0,0、-10,0] の最初の減少は reduce sum([null、30])= 30 になります。
追加された 著者 Marcin Skórzewski,
ajaxオプションを使用して:
追加された 著者 ddouglascarr,
申し訳ありませんが、誤って提出しました。 group = trueまたはgroup_level = 1、reduce = trueの場合例:curl -X GET localhost:5984/testDatabase/_design /テスト/ _view /…
追加された 著者 ddouglascarr,

答えはありません

0