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),但由于它只有一个数据,即'sam',forEach 不适用于此,因为 forEach 仅适用于关联数组。

仅供参考:当我为嵌套数组尝试相同的代码时,其所有列表的数组格式都相同,我可以获得所需的输出。

请帮助我使用 mongo shell 正确获取代码。

提前致谢:)

4

1 回答 1

17

您需要检查是否y.name是一个数组,然后才尝试打印这些值。像这样的东西应该工作:

db.test1.find().forEach(function (x) {
    x.array.forEach(function (y) {
        if (y.name instanceof Array) {
            y.name.forEach(function (z) {
                print(z.name);
            });
        }
    });
});
于 2013-10-20T15:13:10.757 回答