sql >> データベース >  >> NoSQL >> MongoDB

JSONパスの親オブジェクトまたは同等のMongoDBクエリ

    自分の賞金を追加した直後に、私は解決策を見つけました。私の問題は同じ基本構造を持っています。それは親識別子であり、評価(品質、値など)のためのいくつかの数Nの子キー/値のペアです。

    まず、SKU、Name、size_break_costs配列をすべて文字列として取得するJSON入力ステップが必要です。重要な部分は、size_break_costsが文字列であり、基本的には文字列化されたJSON配列であるということです。配列が空のパスを取得した場合、または何らかの理由でフィールドが欠落している場合に備えて、JSON入力の[コンテンツ]タブで[欠落しているパスを無視する]がオンになっていることを確認してください。

    フィールドには、次を使用します:

    Name           | Path               | Type
    ProductSKU     | $.sku              | String
    ProductName    | $.name             | String
    SizeBreakCosts | $.size_break_costs | String
    

    このステップの後に、「SizeBreakCosts IS NOT NULL」という条件で「行のフィルター」ブロックを追加しました。これは、2番目のJSON入力ブロックに渡されます。この2番目のJSONブロックでは、「ソースはフィールドで定義されていますか?」をチェックし、「フィールドからソースを取得」の値を「SizeBreakCosts」または最初のJSON入力ブロックで名前を付けた値に設定する必要があります。

    繰り返しになりますが、「欠落しているパスを無視する」と「空のファイルを無視する」がチェックされていることを確認してください。このブロックから、2つのフィールドを取得する必要があります。渡された各行にはすでにProductSKUとProductNameがあり、この2番目のJSON入力ステップではさらに分割されますが、SizeBreakCosts入力JSONには多くの行があります。フィールドには、次を使用します:

    Name     | Path           | Type
    Quantity | $.[*].quantity | Integer
    Size     | $.[*].size     | String
    

    ご覧のとおり、これらのパスは「$。[*]。FieldName」を使用します。これは、渡したJSON文字列にルートアイテムとして配列が含まれているため、その配列内のすべてのアイテムを取得し、その量とサイズ。

    これで、すべての行に親オブジェクトのSKUと名前、および各子オブジェクトの数量とサイズが含まれるはずです。この例をテキストファイルにダンプすると、次のようになります。

    ProductSKU;ProductName;Size;Quantity
    SK3579;Authority;S; 80
    SK3579;Authority;M; 14
    SK3579;Authority;L; 55
    



    1. doRedisは、異なるRedisサーバービルドのWindows8x64でエラーを返します

    2. ActionController::LiveをResque+Redisと一緒に使用する方法(チャットアプリケーション用)

    3. MongoDB例外:サーバーはワイヤーバージョン0を報告しますが、libmongocのバージョンには少なくとも3が必要です

    4. MongoShell-コンソール/デバッグログ