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

ネストされた配列で$unwindを使用した結果?

    の場合は、メモリリソースを認識することをお勧めします。 $ unwind 発生するデータの複製のために。

    $ matchを使用する 結果を探している特定のドキュメントに絞り込むことは、もちろん、返されたデータを保持するために必要なメモリの量を減らす1つの方法です。

    メモリフットプリントを削減するもう1つの方法は、 $ project $ project パイプライン内のドキュメントを再編成して、関心のある要素のみを返すようにすることができます。

    あなたの例を使用するには、

    {
      someInfo: "blah blah blah",
      answers: [
        {
          email: "[email protected]",
          values: [
            {value: 1, label: "test1"},
            {value: 2, label: "test2"}    
          ]
        },
        {
          email: "[email protected]",
          values: [
            {value: 6, label: "test1"},
            {value: 1, label: "test2"}    
          ]
        }
      ]
    }
    

    あり

    db.collection.aggregate([{ $match: { <element>: <value> }}, { $project: { _id: 0, answers: 1}}])
    

    someInfoを削除します および興味がない可能性のあるその他の属性。次に、 $ project 巻き戻した後、再び...

    db.collection.aggregate([
       { $match: { <element>: <value> }},
       { $project: { _id: 0, answers: 1}},
       { $unwind: "$answers"},
       { $unwind: "$answers.tags"},
       { $project: { e: "$answers.email", v: "$answers.values"}}
    ])
    

    次のようなかなりコンパクトな結果が返されます:

    { e: "[email protected]", v: { value: 1, label: "test1" } }
    { e: "[email protected]", v: { value: 2, label: "test2" } }
    { e: "[email protected]", v: { value: 6, label: "test1" } }
    { e: "[email protected]", v: { value: 1, label: "test2" } }
    

    1文字の属性名は人間の読みやすさを低下させますが、長く繰り返される属性名によって膨らむデータのサイズを削減します。




    1. MEANスタックのログインシステムのアーキテクチャ?

    2. MongoDB-重複するエントリで_idインデックスがエラーをスローしないのはなぜですか?

    3. ScaleGridがカナダでのMongoDBホスティングサービスを発表

    4. NoSQLデータベースが集計関数(AVG、SUMなど)でどのように機能するか