7

ネストされた配列形式のデータを含むドキュメントのコレクションと、異なる形式の配列リストがあります。

入力:

{ 
    "_id" : ObjectId("5262d2eaca24d995f4958083"),
    "array" : [
        {
            "name" : "sam",
            "roll" : 21 
        },  
        {
            "name" : "vam",
            "roll" : 22
        },  
        {
            "name" : "mam",
            "roll" : 23
        },  
        {
            "name" : "jam",
            "roll" : [31, 32, 33, 34]
        },
        {
            "name" : [
                {"name" : "lam" },
                {"name" : "ham" },
                {"name" : "pam" }
            ],
            "roll" :[
                {"roll" : 41},
                {"roll" : 42},
                {"roll" : 43}
            ]
        }
    ]
}

(上記のコードでは、array[4] はその前任者と比較して異なる形式を持っています)

配列[4]のすべての名前、つまりlam、ham、pamを取得したい

望ましい出力:

ラムハムパム
_
_

私のアプローチ:次のコードを試しました

db.test1.find().forEach(function(x)
{
    x.array.forEach(function(y)
    {
        y.name.forEach(function(z)
        {
            print(z.name);
        })
    })
})

しかし、これによりエラーの理由が次のようになります。

エラー: Sam にはメソッド 'forEach' がありません:

名前 (arraylist 1) をループしようとしますが、データが 1 つしかないため、つまり 'sam' であるため、forEach はこれに対して機能しません。forEach は連想配列に対してのみ機能します。

参考までに、入れ子になった配列に対して同じコードを試したところ、すべてのリストで配列形式が同じで、目的の出力を得ることができました。

mongoシェルを使用してコードを正しく取得するのを手伝ってください。

前もって感謝します:)

4

1 に答える 1